克隆成矢量
C++ - Cloning into a vector
因此,push_back
仅将对象的副本添加到我的类std::vector<Action*>
的向量中。我在对象上有一个clone
方法,我正在推入一个向量:stack.push_back(pattern->actions[a]->clone());
,其中克隆返回一个具有所有相同属性的新对象。这毫无意义吗?push_back
已经做了我想要它做的事情吗?
push_back
存储其参数的副本。但是实参是指针,而不是指针。
因为你说Action
是一个多态类型,我们不能做自然的事情,只是使用std::vector<Action>
代替。
考虑您的需求,然后选择另一个解决方案。这是给你的:
- 使用非拥有的原始指针,如果你只是引用那个对象就不要克隆,它会活得足够长。
- 避免高级结构,并像您所展示的那样手动进行克隆。
- 考虑
boost::variant
。但是,在定义派生类时必须知道所有的派生类。 - 如果矢量拥有
Action
(参见std::make_unique
),则使用std::unique_ptr
。 - 使用
std::shared_ptr
,如果它应该共享所有权(也参见std::make_shared
)。 - 如果矢量不拥有
Action
,则使用std::weak_ptr
。 - 使用像这样的自制
copy_ptr
来自动克隆。
std::vector<Action*>
存储指向Action
的指针。
因此,push_back只向std::vector中添加对象的副本。
更准确地说,它添加了一个指向Action
的指针的副本。在很大程度上,不,这个前提是错误的。
不,这不是没有意义的。但这与习语相反。您应该考虑使用…
stack.push_back(pattern->actions[a]->clone());
,其中clone
返回一个具有所有相同属性的新对象。这毫无意义吗?
std::vector<Action>
创建一个复制构造函数(并注意三的规则!)。
相关文章:
- 没有找到相关文章