1

我可以对析构函数进行一些澄清。

我知道如果一个对象包含一个指向已分配内存的指针,那么该对象的析构函数应该调用delete该指针。但是,如果一个对象包含一个对象,该对象包含一个指向已分配内存的指针,例如string?:

class Foo
{
    string bar;
};

Foo* foo = new Foo;
delete foo;

我必须做些什么来确保char[]字符串中的底层被释放?

4

4 回答 4

2

string析构函数负责任何清理工作。你不必担心。

于 2012-10-06T20:31:22.103 回答
2

当你的类被破坏时,它的所有成员 - 包括string- 也被自动破坏。

清理由string(其中 char 数组是其他类不应依赖的实现细节)持有的任何内部资源是string对象的析构函数的责任。

于 2012-10-06T20:31:42.497 回答
2

string类型的析构函数负责清理它拥有的任何资源。您对象的析构函数将调用成员对象的析构函数。

于 2012-10-06T20:31:55.490 回答
1

您可以查看以下规则。您使用 new 创建(并保留其所有权)的任何对象都必须通过调用析构函数来delete销毁。

于 2012-10-06T20:34:24.877 回答