-1

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

当我从另一个班级打电话时:

delete myClass;

当我创建一个新的 myClass 时,变量似乎仍然存在。

我是否需要手动删除里面的每个var:

myClass::~myClass()
{
}

谢谢你的帮助!

4

2 回答 2

2

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

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被销毁。它的所有成员都被销毁了: x, y, 并且z现在已经消失了。但是,请注意,这z只是一个指针。指针将被销毁,但不是float它指向的对象。您也需要确保自己delete ap->z。简单的判断方法是我们有两个news 但只有一个delete- 这是一个很好的迹象,表明存在内存泄漏。此代码将泄漏动态分配的float.

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

于 2012-12-26T17:18:06.683 回答
0

如果它们是指向第一个实例唯一的类实例的指针,则必须删除它们。否则,它们将与它们的容器一起被删除。

于 2012-12-26T17:17:37.660 回答