删除对象及其在C ++中的变量

时间:2012-12-26 17:12:37

标签: c++

我有一个课,我想删除它。课程内部有各种各样的变量,字符串,向量等。

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

delete myClass;

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

我是否需要手动删除内部的每个var:

myClass::~myClass()
{
}

感谢您的帮助!

2 个答案:

答案 0 :(得分: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指向的对象被销毁。它的所有成员都被销毁:xyz现已消失。但请注意,z只是一个指针。指针将被销毁,但不会被指向的float对象被销毁。你需要确保delete ap->z。简单的说法是我们有两个new但只有一个delete - 这是一个很好的迹象,表明存在内存泄漏。此代码将泄漏动态分配的float

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

答案 1 :(得分:0)

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