我们都知道并喜欢智能指针的安全性和速度,但是必须调用像这样的函数让我感到不舒服:
我觉得这样做冗长而且过于繁琐,有没有更好的方法?我不能只传递一个原始指针并在
编辑:我想补充说明
void TreeNode::addChild(unique_ptr<TreeNode> newChild){
children_.push_back(std::move(newChild));
}
//This has to be called like so:
node.addChild(unique_ptr<TreeNode>(new TreeNode(10));
我觉得这样做冗长而且过于繁琐,有没有更好的方法?我不能只传递一个原始指针并在
addChild
中创建我的unique_ptr
吗?还有哪些替代方案和这种冗长写法的好处?编辑:我想补充说明
TreeNode
可以从中派生,因此仅实现addChild(int arg)
是不够的。
template<class... Args> void TreeNode::addChild(Args&&... args)
重载问题中的addChild
函数,实际上是将std::make_unique
内联。结果为:node.addChild(10)
。 - MSaltersfoo
的调用没有歧义,而且很明确地传递了一个唯一指针。 - iFreilicht