所以push_back
只会将对象的副本添加到我的班级std::vector<Action*>
的矢量中。我在对象上有一个clone
方法,我正在推入一个向量:stack.push_back(pattern->actions[a]->clone());
其中clone返回一个具有所有相同属性的新对象。这没有意义吗? push_back
做了我想做的事吗?
答案 0 :(得分:1)
push_back
存储了它的参数cpy。但是参数是指针,而不是指针。
因为你说Action
是一个多态类型,我们不能自然而然地只使用std::vector<Action>
。
考虑您的要求,然后选择其他解决方案。这里有一些给你:
boost::variant
。但是,在定义它时,您必须知道所有派生类。std::unique_ptr
,请使用Action
(另请参阅std::make_unique
)。std::shared_ptr
(另请参阅std::make_shared
)。std::weak_ptr
,则使用Action
。{/ 1}} copy_ptr
like this进行自动克隆。答案 1 :(得分:0)
std::vector<Action*>
存储指向Action
的指针。
因此push_back只会将对象的副本添加到std :: vector中。
更准确地说明它将指针的副本添加到Action
。在大多数情况下,不,这个前提是错误的。
不,这不是没有意义的。但这与成语相反。您应该考虑使用...
stack.push_back(pattern->actions[a]->clone());
其中clone
返回一个具有所有相同属性的新对象。这没有意义吗?
std::vector<Action>
创建一个复制构造函数(并注意Rule of Three!)。