我有这个C ++结构:
struct Node {
char symbol;
unsigned int index;
vector<Node*> next;
// Constructors
Node():symbol('$'), index(0), next(0) {}
Node(char &c, const unsigned int &ind):symbol(c), index(ind), next(0) {}
// Add a new character
Node* add(char &c, const unsigned int &num) {
Node *newChar = new Node(c, num);
next.push_back(newChar);
return newChar;
}
// Destructor
~Node() {
for (int i = 0; i < next.size(); i++)
delete next[i];
}
};
(我知道把它作为一个班级可能会更好,但让我们考虑它就好了)。
我不太确定我是否为此编写了正确的析构函数。在主要功能中,我使用根节点:
Node *root = new Node();
答案 0 :(得分:6)
虽然代码不会泄漏内存(只要你delete
中的main
根节点new
),它就不是最佳的。
您应该避免使用delete
和unique_ptr
,而应选择智能指针。在这种情况下,请使用Node root;
// use root normally
。
另外,不要在堆上创建根节点,只需像以下那样正常创建它:
unique_ptr
您也没有正确遵循五条规则,如果您使用c
,则甚至不需要担心,因为您没有自定义dtor。也没有理由按ind
和ref
const ref
和struct Node {
char symbol;
unsigned int index;
vector<std::unique_ptr<Node>> next;
// Constructors
Node():symbol('$'), index(0){}
Node(char c, unsigned int ind):symbol(c), index(ind) {}
// Add a new character
Node* add(char c, unsigned int num) {
next.push_back(std::make_unique<Node>(c, num));
return next.back().get();
}
};
,只是按值传递它们(因为你甚至不更改它们,而且价格便宜通过ref传递基元的值。)
通过这些更改,代码看起来像这样
{...
"permissions": [
"http://random.com/"
],
}