函数内的 C++ 指针删除



我知道如果我在头文件中创建一个指针,我应该在调用析构函数时始终删除它,但是如果我在函数内创建一个指针呢?我知道基本变量在块的末尾被破坏,指针也一样吗?

例如:

Class::Function()
{
int i = 3; // This gets destroyed after the function ends
int* j = 5; // What about this? Do I have to delete it somewhere to keep from a leak?
}

如果我在构造函数内部初始化j,我会说delete j;以防止泄漏等。在这种情况下,我应该做些什么吗?

int值分配给指针

int* j = 5;

是非法的,因为您正在存储intint*。反正你可以投射它

int* j = reinterpret_cast<int*>( 5 );

但是取消引用此指针会导致未定义的行为,因为您不知道该指针指向何处。


你应该初始化这样的指针

int* j = nullptr;

由于c++11您无法创建nullptr_t实例并分配它。

nullptr_t initPointer;
int* j = initPointer;

如果不使用运算符new将内存分配给指针,则无法delete此指针,这将导致未定义的行为。否则,如果您使用new则需要匹配delete否则会出现内存泄漏。如果要检查程序是否有内存泄漏,请检查此线程并选择一个工具。我可以推荐瓦尔格林德。

每次调用new都需要一个匹配的调用来delete。如果你的new多于delete,你就会得到内存泄漏。如果相反,您将获得双重删除。在您的情况下,如果您从未调用过new,则无需删除!

有一些工具可以帮助您匹配新删除。我个人最喜欢的是cppcheck。它非常快速且易于使用,并且可以在 c++ 源代码上运行!它通常在捕获不匹配的新呼叫和删除呼叫方面做得很好。

最新更新