【问题标题】:do you need destructor to destroy global int, float or std::string variables?您是否需要析构函数来销毁全局 int、float 或 std::string 变量?
【发布时间】:2013-10-29 23:30:03
【问题描述】:

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

【问题讨论】:

  • 您需要阅读 C++ 的基础知识。如果您已经有,请寻找其他来源,因为您当前使用的来源不是很好。

标签: c++ arrays string int destructor


【解决方案1】:

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

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

【讨论】:

  • 有趣的是,他的代码显示了一些与他的问题无关的内容。就好像他将delete 和破坏混为一谈:例如,他的析构函数肯定会破坏str
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2020-12-27
      • 2010-09-08
      • 2018-06-19
      • 2017-02-26
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多