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