【发布时间】:2017-04-21 00:53:28
【问题描述】:
我有这样的代码:
#include <memory>
#include <vector>
using namespace std;
struct A {
virtual ~A() = default;
};
struct B : public A {
};
template<typename... Ts> struct C {
C() : v_({new Ts...}) {}
...
std::vector<A*> v_;
};
...
C<B, B, A> bba;
我想使用std::unique_ptr 和std::make_unique 来避免显式调用new 并迭代v_ 以在析构函数中将其删除(v_ 将变为std::vector<std::unique_ptr<A>>)但无法弄清楚如何将std::make_unique 与初始化列表和可变参数扩展结合起来(我怀疑是因为std::unique_ptr 只能移动)。有什么建议?
【问题讨论】:
-
它改变了问题,但为什么
std::vector<std::unique_ptr<A>>而不是std::tuple<std::unique_ptr<Ts>...>?如果集合预计会更改内容签名,则构造函数应该是模板,而不是类。
标签: c++ c++11 c++14 variadic-templates unique-ptr