gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:33 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com