我可以对析构函数进行一些澄清。
我理解如果一个对象包含指向已分配内存的指针,那么该对象的析构函数应该在该指针上调用delete
。但是,如果一个对象包含一个包含指向已分配内存的指针的对象,例如string
?:
class Foo
{
string bar;
};
Foo* foo = new Foo;
delete foo;
我必须做些什么才能确保字符串中的基础char[]
被解除分配?
答案 0 :(得分:2)
string
类析构函数负责任何清理。你不必担心它。
答案 1 :(得分:2)
当你的课程遭到破坏时,其所有成员 - 包括string
- 也会被自动销毁。
清除string
(其中char数组是其他类不应该依赖的实现细节)所持有的任何内部资源是string
对象的析构函数的责任。
答案 2 :(得分:2)
string
类型的析构函数负责清理它拥有的任何资源。对象的析构函数将调用成员对象的析构函数。
答案 3 :(得分:1)
您可以查看以下规则。必须通过在析构函数中调用delete
来破坏您使用new创建(并保留所有权)的任何对象。