指向数组的指针的析构函数
Destructor of a pointer to an array
我有一个指向字符串的指针
string* relatori;
并在 class 构造函数中
Conference() : numMaxRel(10)
{
relatori = new string[numMaxRel];
}
它是第一个元素有指针的标准数组吗?所以在析构函数中我必须执行以下操作?
Conference::~Conference()
{
delete rel;
}
删除指向的整个数组,因为您使用 [] 分配
delete []rel;
delete rel
无法释放数组的内存。为此,您必须使用 delete[] rel
。但是,您应该知道,您可以使用标准库中的容器来为您进行内存管理,例如 std::vector<string>
。这应该几乎总是首选方式。这就是你的 class 的样子(注意:你不需要析构函数):
class Conference
{
public:
Conference() : numMaxRel(10)
{
rel.reserve(numMaxRel);
}
private:
size_t numMaxRel;
std::vector<std::string> rel;
};
另请注意,您现在有一个自定义的复制构造函数和移动构造函数、复制和移动赋值,它们开箱即用,可以执行您希望它们执行的操作。
我有一个指向字符串的指针
string* relatori;
并在 class 构造函数中
Conference() : numMaxRel(10)
{
relatori = new string[numMaxRel];
}
它是第一个元素有指针的标准数组吗?所以在析构函数中我必须执行以下操作?
Conference::~Conference()
{
delete rel;
}
删除指向的整个数组,因为您使用 [] 分配
delete []rel;
delete rel
无法释放数组的内存。为此,您必须使用 delete[] rel
。但是,您应该知道,您可以使用标准库中的容器来为您进行内存管理,例如 std::vector<string>
。这应该几乎总是首选方式。这就是你的 class 的样子(注意:你不需要析构函数):
class Conference
{
public:
Conference() : numMaxRel(10)
{
rel.reserve(numMaxRel);
}
private:
size_t numMaxRel;
std::vector<std::string> rel;
};
另请注意,您现在有一个自定义的复制构造函数和移动构造函数、复制和移动赋值,它们开箱即用,可以执行您希望它们执行的操作。