这只是我在阅读另一个问题时的一个无聊想法:
What is the correct way to delete char**
如果那个问题中提到的字符是在一个对象中创建的,并且该对象被删除了,那么这是否也会正确地清理指针,或者它们会卡在内存中吗?
最佳答案
如果你删除一个对象,那个对象的析构函数会被调用,所以你需要在析构函数中做一个delete。所以请记住,类在堆上分配的所有内容都必须在析构函数中释放。如果它是在堆栈上分配的,这会自动发生
struct A
{
A() { std::cout << "A()" << std::endl; ptr = new char[10]; }
~A() { std::cout << "~A()" << std::endl; delete []ptr; }
char *ptr;
};
但是要小心,如果你使用继承,如果A
继承自一个基类,你需要将基类的析构函数设为virtual,否则A
中的析构函数不会被调用,你会发生内存泄漏。
struct Base
{
virtual ~Base() {}
};
struct A : public Base
{
A() { std::cout << "A()" << std::endl; ptr = new char[10]; }
~A() { std::cout << "~A()" << std::endl; delete []ptr; }
char *ptr;
};
关于c++ - c++中删除类或结构时,删除了多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989753/