【发布时间】:2016-02-17 01:45:37
【问题描述】:
我有以下 C++ 代码。由于内存是动态分配的,因此应该在堆上分配。或者,由于内存是在声明时分配的,而不是在任何构造函数中,它是在堆栈上分配的吗?我需要解构器来释放内存吗?
class param{
public:
char* st = new char[256];
};
在以下情况下会发生什么?我猜这是在堆栈上分配的,不需要使用解构函数来释放。
class param{
public:
char st[256];
};
第三种方法是写成:
class param{
public:
char* st;
param()
{
st = new char[256];
}
~param()
{
delete[] st;
}
};
以上三种方法中哪一种是正确的做法?
【问题讨论】:
-
针对 valgrind 运行第一个版本表示内存泄漏,因此它是在堆上分配的。您必须稍后在某处手动删除,这很弱。第二种或第三种方式都是有效的方法。对于第 3 种方式,请确保您提供合适的(或已删除的)复制和移动构造函数和赋值运算符,以确保正确处理内存所有权。
-
真的没有任何意义。使用
std::vector或std::array。
标签: c++ memory memory-management