如果我在类中有一个字符串,则分配内存。我是否必须销毁析构函数中的字符串? e.g。
class A { string Test; A() { Test = "hello world"; } A(string &name) { Test = name; } ~A() { // do I have to destroy the string here? } }
我是一名旧的c / c ++(pre stl)程序员并重新使用c ++。字符串是否会使用某些模板魔法自动销毁?
TIA, 戴夫
答案 0 :(得分:6)
是。字符串和容器为您分配/解除分配。但是,一个指针容器并没有释放那些指针所指向的东西。你必须自己完成这些工作。
答案 1 :(得分:2)
没有。一旦A的实例超出范围,就会调用字符串的析构函数。
答案 2 :(得分:2)
您没有创建指向字符串的指针,因此Test将被分配到堆栈上(假设对象A已分配到堆栈中)。因此,当它离开范围时,它将自动解除分配。如果Test是一个指针,它将被分配在堆上,你需要在析构函数中删除它
答案 3 :(得分:0)
你清理你的烂摊子,标准库清理它的烂摊子。 std :: string分配的内存是它的混乱。
析构函数的默认行为是在每个基础和数据成员上调用析构函数。您的字符串是数据成员,因此调用其析构函数。它的析构函数完成了所有需要在这里完成的事情,所以在这里清理任何东西都不需要(事实上这是非常错误的)比在main()中将字符串作为局部变量。