假设我有一个自己创建的链表。它有自己的析构函数,可以释放内存。这个链表没有重载new或delete。
现在,我正在尝试创建一个所述链表的数组(如果我理解正确的话,这是一种开放式哈希)。然后,在此开放式哈希类的构造函数中分配必要的内存。在构造函数内部调用的new运算符足以正确地为数组分配内存,对吗?我不确定,因为我没有为链表类重载new。
另外,假设我的链表数组被称为elements,我是否可以只写“delete[] elements”在析构函数中?那样会调用数组中每个元素的析构函数并正确释放内存吗?
最后,如果我的两个假设都是正确的(即,我不需要重载new和delete来使用它们与我的自定义类),那么重载这些运算符的意义是什么?
现在,我正在尝试创建一个所述链表的数组(如果我理解正确的话,这是一种开放式哈希)。然后,在此开放式哈希类的构造函数中分配必要的内存。在构造函数内部调用的new运算符足以正确地为数组分配内存,对吗?我不确定,因为我没有为链表类重载new。
另外,假设我的链表数组被称为elements,我是否可以只写“delete[] elements”在析构函数中?那样会调用数组中每个元素的析构函数并正确释放内存吗?
最后,如果我的两个假设都是正确的(即,我不需要重载new和delete来使用它们与我的自定义类),那么重载这些运算符的意义是什么?
shared_ptr
或unique_ptr
。两者都是在c++11 STL <memory>中引入的。 共享指针将自动进行删除的簿记。注意:对于数组,由shared_ptr
提供的默认删除器调用delete,而不是delete[],因此请使用lambda函数std::shared_ptr<int> p(new int[10], [](int* p) { delete[] p; });
或者std::shared_ptr<int> p(new int[10], std::default_delete<int[]>());
或者使用从unique_ptr提供的帮助程序,该程序调用delete[]std::unique_ptr<int,void(*)(int*)> p(new int[10], [](int* p) { delete[] p; });
- katta