【发布时间】:2017-07-16 18:35:45
【问题描述】:
我正在学习使用托管指针,特别是 unique_ptr。
我已经实现了这些简单的类,但是函数 makeAnimalNoise() 不起作用,即使我认为我传递了正确的参数。
函数 makeAnimalNoise() 有什么问题?这个函数的正确参数应该是什么?还是定义本身有误?
class Animal{
public:
Animal(){
cout<<"An animal is born"<<endl;
}
virtual ~Animal(){
cout<<"An animal dies"<<endl;
}
virtual void doAnimalStuff()=0;
};
class Dog: public Animal{
public:
Dog(){
cout<<"A dog is born"<<endl;
}
~Dog() {
cout<<"A dog dies"<<endl;
}
void doAnimalStuff() override {
cout<<"I'm a dog"<<endl;
}
};
class Cat: public Animal{
public:
Cat(){
cout<<"A cat is born"<<endl;
}
~Cat() {
cout<<"A cat dies"<<endl;
}
void doAnimalStuff() override {
cout<<"I'm a cat"<<endl;
}
};
void makeAnimalNoise(unique_ptr<Animal>an){
an->doAnimalStuff();
}
int main(){
unique_ptr<Animal>Dog=unique_ptr<Dog>(new Dog());
unique_ptr<Animal>Cat=unique_ptr<Cat>(new Cat());
makeAnimalNoise(Dog); //doesn't work here
makeAnimalNoise(Cat); //doesn't work here
}
【问题讨论】:
-
unique_ptr应该是唯一的 并传达所有权的概念。如果您正在做一些涉及复制它们的事情,那么您就做错了。
标签: c++ polymorphism unique-ptr