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