med*_*ivh 5 c++ memory-management
这只是我在阅读其他问题时的一种空洞的想法:
如果那个问题中提到的字符是在一个对象中创建的并且该对象被删除了,那么它是否会正确地清理指针,还是会被卡在内存中?
如果删除对象,则将调用该对象的析构函数,因此需要在析构函数中执行删除操作.所以请记住,类在堆上分配的所有内容都必须在析构函数中释放.如果它已在堆栈上分配,则会自动发生
struct A
{
A() { std::cout << "A()" << std::endl; ptr = new char[10]; }
~A() { std::cout << "~A()" << std::endl; delete []ptr; }
char *ptr;
};
Run Code Online (Sandbox Code Playgroud)
但要小心,如果使用继承,如果A从基类继承,则需要使基础析构函数为虚拟,否则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;
};
Run Code Online (Sandbox Code Playgroud)