c++ - c++中删除类或结构时,删除了多少?

标签 c++ memory-management

这只是我在阅读另一个问题时的一个无聊想法:

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/

相关文章:

c++ - ActiveQt Com 应用程序示例 - COM 服务器未在 Windows 注册表中注册 (Qt4.7.4)

c++ - std::chrono::duration 缺乏即时滴答计数操作的原因是什么?

C++ 删除静态数据

ios - 在没有 ARC 的 iOS 中,我需要在哪里释放内存?

go - 内存使用情况: nil interface{} vs struct{}

c++ - 嵌套类和对外部类的引用 (c++)

c++ - a/c++代码的编译到执行的过程是怎样的?

java - 如何打印出 Java jvm 内存用于调试目的?

c++ - 20,000 个小对象的 vector 与指向 20,000 个堆对象的 20,000 个对象指针的 vector

IOS7 : memory pressure, 应用程序在发送警告之前崩溃