C++删除指针本身,而不是删除指向数据。

C++删除指针本身,而不是删除指向数据。

通常,指针将停止存在于作用域的末尾。

示例:

代码语言:javascript复制{

int *p = NULL;

// do something with p

} // <-- p will be destroyed here因此,指针变量被称为具有自动存储持续时间。如果一致执行,则将0、NULL或nullptr分配给没有指向指定类型的对象的指针变量,这样可以很容易地识别取消引用指针是否安全。此实践与指针的生存期或以前指向的对象(如果有的话)没有直接联系。

相反,当您有以下代码时:

代码语言:javascript复制{

int *p = new int;

// do something with p

//delete p; // <-- the object p points to will not be destroyed unless it's deleted

} // <-- p will be destroyed here同样,指针变量本身将在作用域结束时被销毁,因为它具有自动存储持续时间。相反,我们使用int操作符分配的new对象(本例中指针指向的对象)具有动态存储持续时间。它将继续驻留在内存中,直到调用delete来释放它。这可能导致内存泄漏(如果您丢失了指向的对象p的任何引用,如本例所示)。

当然,如果指针是由自己动态创建的,例如

代码语言:javascript复制{

int** p = new int*;

// do something with p

//delete p; // <-- the object p points to will not be destroyed unless it's deleted

} // <-- p will be destroyed here..。这可能是递归示例的起点。

请注意,有一种东西称为静态存储持续时间,这意味着变量将一直存在直到程序结束(例如,全局变量或静态变量)。如果您想阅读有关此主题的更多内容,请参见:

http://en.cppreference.com/w/cpp/language/storage_durationhttp://en.cppreference.com/w/cpp/language/static

注意,与其存储时间无关,任何变量(包括指针)都占用一定数量的内存。通常,如果同时为太多的对象分配空间,就会耗尽内存。因此,您应该避免实现无限递归、分叉炸弹、内存泄漏或类似的东西。

🎈 相关推荐

《鬼滅熱潮再臨》粉絲三刷新劇場版無限城篇 有沒有機會刷新無限列車篇的票房紀錄呢?
在Linux中,开源的优势是什么?
365bet体育在线365

在Linux中,开源的优势是什么?

📅 10-08 👀 780
臺灣漫畫家專訪-小峱峱
365bet的网站是多少

臺灣漫畫家專訪-小峱峱

📅 12-06 👀 8155