【发布时间】:2013-03-20 04:49:11
【问题描述】:
我有这样的代码:
#include <memory>
#include <vector>
namespace daq
{
class Animal
{
public:
Animal(){};
};
class Pig : public Animal
{
public:
Pig() : Animal () {};
};
class Farm
{
public:
void addAnimal(Animal& animal)
{
mAnimals.push_back(std::unique_ptr<Animal>(animal)); // error
}
private:
std::vector<std::unique_ptr<Animal>> mAnimals;
};
} /* namespace daq */
但我在方法 Farm::addAnimal: 中遇到错误:
没有匹配函数调用'std::unique_ptr::unique_ptr(daq::Animal&)'
我应该将什么传递给 push_back 方法?
【问题讨论】:
-
你应该传递一个指针。
-
如果你想存储通过引用收到的项目的动态副本(std::unique_ptr),你必须以某种方式使元素类型(动物)可克隆
标签: c++ c++11 move-semantics