【发布时间】:2015-02-27 14:50:12
【问题描述】:
我解决来自 leetcode、黑客排名或破解编码面试等网站的算法问题。如果用 c++ 的问题,我做的最多。所以对于他们中的大多数人来说,我有一个如下的节点结构
struct Node {
Node* next;
//for tree
Node* left;
Node* right;
int data;
//ctor
Node(int val) : left(nullptr);.....
};
然后我有一个实现算法的函数
bool someAlgorithm(Node* root) {
//do stuff
}
最后我在主节点中创建节点
int main() {
auto root = new Node(4);
root->left = new ..
root->left->left = new ..
}
我想在这种解决方案中加入内存管理。如果我使用 c++11 shared_ptr 是否需要提供析构函数?如果是,我应该在析构函数中写什么?但我发现 shared_ptr 使得代码过于复杂,对于这样的小程序难以理解。
一般来说,解决此类问题记忆安全的最佳方法是什么?
【问题讨论】:
-
std::unique_ptr可能是比std::shared_ptr更好的选择 -
如果
shared_ptr使程序更加变得复杂,那你就做错了。智能指针为您必须自己编写的代码提供了通用实现。所以如果有的话,这个类应该变得更简单。 -
除非节点实际上可以在树之间共享,否则
shared_ptr是错误的方法。unique_ptr可能更有用。
标签: c++ c++11 memory-management