我可以对析构函数进行一些澄清。
我知道如果一个对象包含一个指向已分配内存的指针,那么该对象的析构函数应该调用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销毁。