删除对象及其C++变量

Deleting an object and it's vars in C++

本文关键字:C++ 变量 对象 删除      更新时间:2023-10-16

我有一个类,我想删除它。类内部是各种变量、字符串、向量等。

当我从另一个类调用时:

delete myClass;

当我创建一个新的myClass时,变量似乎还在那里。

我需要手动删除每个变量里面:

myClass::~myClass()
{
}

谢谢你的帮助!

对象的任何成员都将在对象被销毁时被销毁。例如:

struct A
{
  int x;
  char y;
  float* z;
};
void foo()
{
  A* ap = new A{5, 6};
  ap->z = new float(13.37f); // This will be leaked
  delete ap;
  // You may find that the following still works:
  // std::cout << ap.x << std::endl;
}

delete ap之后,ap所指向的对象被销毁。它的所有成员都被破坏了:xyz现在都消失了。但是,请注意z只是一个指针。指针将被销毁,但它所指向的float对象不会被销毁。你也需要确保你的delete ap->z。简单的判断方法是,我们有两个new,但只有一个delete——这是一个很好的迹象,表明存在内存泄漏。这段代码会泄漏动态分配的float

正如上面的代码注释所指出的,您可能会发现尝试访问对象的成员仍然可以正常工作,甚至可以获得正确的值。然而,这并不好。如果您试图访问已被 deleted的对象的任何部分,您将获得未定义行为。这意味着任何事情都有可能发生,包括看起来工作正常。任何调用未定义行为的c++都是完全不可靠的,可能会毁掉整个宇宙。

如果它们是指向类实例的指针,并且对于你的第一个实例来说是唯一的,你将不得不删除它们。