您是否需要析构函数来销毁全局 int、float 或 std::string 变量
do you need destructor to destroy global int, float or std::string variables?
我知道析构函数用于销毁类中的全局指针,但我是否需要它们来销毁像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};
}
你应该只delete
你new
的内容。由于您自己不分配成员变量,因此您不应该(并且由于所有变量都不是指针,因此您不能)使用 delete
释放它们。
经验法则:如果你做new
那么你需要做delete
。
一切都应该在析构函数中被破坏,但是...
所有直接成员将自动销毁;您不能有一个不会破坏它们的析构函数。 (在某些情况下,像int
一样,"析构函数"实际上是一个无操作。
您混淆了销毁和删除。 你只会delete
已动态分配的东西。 (直接 - 如果你做new MyClass
,num
将被动态分配为MyClass
的一部分. 但你不应该,事实上你不能删除它。delete
的论点必须是一个指针,它必须指向使用 new
创建的内容。
有一些变量在进程堆栈上分配了内存。因此,一旦进程退出,堆栈将自动清理占用的内存。您只需要delete
已为其分配内存的变量 new
.
您可以将其视为C
中的malloc
。您只需要free
根据请求动态分配的内存。
相关文章:
- 如何有效地将一个大std::字符串的一部分转换为float
- 如果 std::numeric_limits<float>::is_iec559 为真,这是否意味着我可以以明确定义的方式提取指数和尾数?
- 如何使用 std:from_chars 在 C++17 中从字符串转换为 int/float
- 通过std :: vector作为const float *
- 如何将 std::array<double, 100> 转换为 std::array<float, 100> ?(避免明显的样板实现)
- 优化两个 std::vector<std::complex> 的元素乘积,使用 <float>fftw_malloc() 分配
- 有没有快速的方法可以将std::vector<std::vector<float>>转换为std::vector<float2>?
- 将 const float* 转换为 std::array<float, ...>
- 通过TCP发送std::vector<float>,从boost::asio到QTcpSocket
- 为什么 std::numeric_limits<float>::min() 在流式传输到具有不同函数的输出时行为不同?
- 可以使用 memset 来填充 std::complex<float>s 数组吗?
- 使用std :: ofstream中的c 中的float变量输出
- 从 std::vector<std::vector<float>> 转换为 float**
- 没有匹配函数来调用 std::vector<float>
- 为什么 std::p air<int, int> 可以从 const std::p air<int, float>& 构造?
- 您是否需要析构函数来销毁全局 int、float 或 std::string 变量
- std::vector<float> to std::vector<glm::vecX>无需复制
- 为什么用“std::chrono”进行时差测量时,与“double”类型相比,用“float”类型给出的有效数字更多
- 用SWIG包裹一个4维标准::向量 std::complex。<float>
- C++ 创建一个 std::vector<float> const& 对象