我有两个std::unique_ptr
成员的课。我想通过构造函数设置这些成员。有没有办法用unique_ptr减少详细实例化?
目前我在做这个:
std::unique_ptr<Assignment> assignment{new Assignment{
std::unique_ptr<Variable>{new Variable{"a"}},
std::unique_ptr<Expression>{new Variable{"b"}}
}};
通过定期的三分球,我只是这样做:
auto assignment = new Assignment{new Variable{"a"}, new Variable{"b"}};
delete assignment;
我可以让智能指针版本更简洁不知何故?我希望像这样的东西可能工作。
std::unique_ptr<Assignment> assignment{new Variable{"a"},{new Variable{"b"}};
但是,unique_ptr
的构造函数是显式的,所以它没有。
你可以提供你自己的['std :: make_unique']实现(http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)来使一些事情变得容易一些。 –
如果你正在寻找一种实现'make_unique()'的方法,我会建议:http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding。另外,请注意,在第二个和第三个示例中,如果构建第二个“新变量”失败,则会泄漏内存。 (这是std :: make_unique和std :: make_shared全部的一部分)。 –
@sharth:第一个例子中的情况也是如此。我不确定,但我相信编译器可以交错创建两个'unique_ptr'参数,首先执行两个'new',然后构造'unique_ptr',可能会泄漏内存。您需要交错函数调用('make_unique')以确保没有内存泄漏。 –