【发布时间】:2023-03-27 01:44:01
【问题描述】:
假设我有一个我自己创建的链接列表。它有自己的析构函数,可以释放内存。此链接列表不会重载 new 或 delete。
现在,我正在尝试创建一个所述链接列表的数组(如果我理解正确,则为开放散列)。然后我在这个开放散列类的构造函数中分配必要的内存。在构造函数中调用的 new 运算符足以为数组正确分配内存,对吧?我不确定,因为我没有为 Linked List 类重载 new。
另外,假设我的链接列表数组被称为元素,我可以在析构函数中写“删除[]元素”吗?这会为数组中的每个元素调用析构函数并正确释放内存吗?
最后,如果我的两个假设都是正确的(即,我不必重载 new 和 delete 就可以在我的自定义类中使用它们),那么重载这些运算符有什么意义?
【问题讨论】:
-
如果你必须使用新的使用
shared_ptr或unique_prt。两者都是在 c++11 STL中引入的。共享指针将自动记录删除。注意 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; });
标签: c++ constructor destructor new-operator