我需要在c ++中销毁一个字符串吗?

时间:2010-12-04 01:02:30

标签: c++ stl

如果我在类中有一个字符串,则分配内存。我是否必须销毁析构函数中的字符串? 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, 戴夫

4 个答案:

答案 0 :(得分:6)

是。字符串和容器为您分配/解除分配。但是,一个指针容器并没有释放那些指针所指向的东西。你必须自己完成这些工作。

答案 1 :(得分:2)

没有。一旦A的实例超出范围,就会调用字符串的析构函数。

答案 2 :(得分:2)

您没有创建指向字符串的指针,因此Test将被分配到堆栈上(假设对象A已分配到堆栈中)。因此,当它离开范围时,它将自动解除分配。如果Test是一个指针,它将被分配在堆上,你需要在析构函数中删除它

答案 3 :(得分:0)

你清理你的烂摊子,标准库清理它的烂摊子。 std :: string分配的内存是它的混乱。

析构函数的默认行为是在每个基础和数据成员上调用析构函数。您的字符串是数据成员,因此调用其析构函数。它的析构函数完成了所有需要在这里完成的事情,所以在这里清理任何东西都不需要(事实上这是非常错误的)比在main()中将字符串作为局部变量。