我有一堂课,我想删除它。类内部是各种变量、字符串、向量等。
当我从另一个班级打电话时:
delete myClass;
当我创建一个新的 myClass 时,变量似乎仍然存在。
我是否需要手动删除里面的每个var:
myClass::~myClass()
{
}
谢谢你的帮助!
我有一堂课,我想删除它。类内部是各种变量、字符串、向量等。
当我从另一个班级打电话时:
delete myClass;
当我创建一个新的 myClass 时,变量似乎仍然存在。
我是否需要手动删除里面的每个var:
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
被销毁。它的所有成员都被销毁了: x
, y
, 并且z
现在已经消失了。但是,请注意,这z
只是一个指针。指针将被销毁,但不是float
它指向的对象。您也需要确保自己delete ap->z
。简单的判断方法是我们有两个new
s 但只有一个delete
- 这是一个很好的迹象,表明存在内存泄漏。此代码将泄漏动态分配的float
.
如上面的代码注释中所述,您可能会发现尝试访问对象的成员仍然可以正常工作,并且您甚至可以获得正确的值。但是,这并不好。如果您尝试访问已被delete
d 的对象的任何部分,您会得到未定义的行为。这意味着任何事情都可能发生,包括看起来工作正常。任何调用未定义行为的 C++ 都是完全不可靠的,并且可能会破坏宇宙。
如果它们是指向第一个实例唯一的类实例的指针,则必须删除它们。否则,它们将与它们的容器一起被删除。