您是否需要析构函数来销毁全局 int、float 或 std::string 变量

do you need destructor to destroy global int, float or std::string variables?

本文关键字:float std string int 变量 全局 是否 析构函数      更新时间:2023-10-16

我知道析构函数用于销毁类中的全局指针,但我是否需要它们来销毁像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}; 
}

你应该只deletenew的内容。由于您自己不分配成员变量,因此您不应该(并且由于所有变量都不是指针,因此您不能)使用 delete 释放它们。

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

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

所有直接成员将自动销毁;您不能有一个不会破坏它们的析构函数。 (在某些情况下,像int一样,"析构函数"实际上是一个无操作。

您混淆了销毁和删除。 你只会delete已动态分配的东西。 (直接 - 如果你做new MyClassnum将被动态分配为MyClass的一部分. 但你不应该,事实上你不能删除它。delete的论点必须是一个指针,它必须指向使用 new 创建的内容。

有一些变量在进程堆栈上分配了内存。因此,一旦进程退出,堆栈将自动清理占用的内存。您只需要delete已为其分配内存的变量 new .

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

相关文章: