指向对象及其析构函数的指针
Pointer to object and its destructor
class finder
{
public:
finder();
~finder();
}
int _tmain(int argc, _TCHAR* argv[])
{
finder* pfind = new finder(L"test");
finder find(L"test2");
system("PAUSE");
return 0;
}
我知道 find 的析构函数将在程序退出后调用,但不会调用 pfind 的析构函数。我的问题是为什么?我应该添加吗
delete _pfind;
在返回 0 之前?
"为什么"是因为您负责管理使用 new
创建的对象的生存期。
该语言说,具有自动存储持续时间的对象(如示例中的find
(与创建它们的块一样长。这些会在适当的时间(即通常在您离开该块时(自动删除(您不得自己删除(。
动态存储持续时间对象(如pfind
指向的对象(会一直持续到您将其删除为止。没有什么会为您删除它们。
所以是的,在这种情况下,您需要自己删除它,并delete pfind;
.
(或者为您的用例使用适当类型的智能指针。
是的,您应该通过在非托管指针上调用 delete
来显式清理分配的内存。通常,任何通过new
分配内存的代码块都必须通过通过delete
释放该内存的代码块来平衡。
Mat 是对的,但我注意到您使用的是 CLR/.Net C++(或者他们现在怎么称呼它(。我相信这带有一个 gcnew
关键字,它将执行与 new
关键字相同的操作,但在其范围结束时删除对象。这也称为垃圾回收。就个人而言,同时拥有new
和gcnew
是一个很好的工具,因为它们都非常适合不同的情况。请记住,如果您使用 gcnew
,您的代码将不会是跨平台的。
相关文章:
- 优先顺序:智能指针和类析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 当指针在 cpp 17 中失去引用时,是否会调用非默认析构函数?
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- 如何将析构函数分配给指针
- 智能指针析构函数争用条件
- 是否可以在其析构函数中使用指向已销毁对象的指针?
- 在C++中删除指针数组时析构函数崩溃
- C++ 由于类析构函数中的指针设置为 NULL 而导致的内存泄漏
- 如果引用应该保留,不删除析构函数中的指针会导致内存泄漏吗?
- 删除析构函数C++中的指针
- 构造函数是否unique_ptr初始化原始指针unique_ptr析构函数是否也删除关联的原始指针?
- 为什么在将多态行为与指向接口的指针一起使用时没有调用析构函数?
- 在析构函数内取消引用指针时出现分段错误
- 共享指针析构函数中的内存顺序
- 在共享指针的值中调用 std::swap 调用一堆构造函数和析构函数
- 在特殊情况下使析构函数不是虚拟的,并删除基指针是否安全
- 删除对象而不调用成员指针的析构函数
- 析构函数在与 STL 的共享指针中调用两次