0

我知道析构函数用于销毁类中的全局指针,但我是否需要它们来销毁普通变量,如 int 或 std::string?

像 int num[2] 这样的数组怎么样?

应该在析构函数中销毁哪些变量类型?

例如:

class myclass
{
public:
   myclass()
   ~myclass()
   {
      delete num;
      delete ar_num;
      delete str;
   }
private:
   int num;
   std::string str;
   int ar_num[2] = {0,1}; 
}
4

3 回答 3

8

你应该只做deletenew。由于您不自己分配成员变量,因此您不应该(并且因为没有一个变量是指针,所以您不能)使用delete.

经验法则:如果你这样做,new那么你需要这样做delete

于 2013-10-21T12:56:17.777 回答
1

一切都应该在析构函数中被破坏,但是......

所有直接成员将被自动销毁;你不能有一个不破坏它们的析构函数。(在某些情况下,例如int,“析构函数”实际上是空操作。)

你混淆了销毁和删除。你只delete 需要动态分配的东西。(Directy——如果你这样做new MyClassnum将作为 的一部分动态分配MyClass。但你不应该,而且你确实不能删除它。) 的参数delete必须是一个指针,并且它必须指向使用 . 创建的东西new

于 2013-10-21T12:59:40.677 回答
0

有一些变量在进程堆栈上分配了内存。所以,进程一退出,栈就会自动清理占用的内存。您只需要delete分配内存的变量new

您可以将其视为mallocing in C。您只需要free根据您的请求动态分配的内存。

于 2013-10-21T13:03:00.487 回答