私はこのようなものがあります:Cは:: shared_ptrのを後押し&後押し++ :: weak_ptrを&dynamic_castを
enum EFood{
eMeat,
eFruit
};
class Food{
};
class Meat: public Food{
void someMeatFunction();
};
class Fruit: public Food{
void someFruitFunction();
};
class FoodFactory{
vector<Food*> allTheFood;
Food* createFood(EFood foodType){
Food* food=NULL;
switch(foodType){
case eMeat:
food = new Meat();
break;
case eFruit:
food = new Fruit();
break;
}
if(food)
allTheFood.push_back(food);
return food;
}
};
int foo(){
Fruit* fruit = dynamic_cast<Fruit*>(myFoodFactory->createFood(eFruit));
if(fruit)
fruit->someFruitFunction();
}
を今、私は私は私の食品インスタンスを削除することができブーストのshared_ptrを使用して、このようなweak_ptrをする自分のアプリケーションを変更したいです1つの場所。それは次のようになります。
class FoodFactory{
vector<shared_ptr<Food> > allTheFood;
weak_ptr<Food> createFood(EFood foodType){
Food* food=NULL;
switch(foodType){
case eMeat:
food = new Meat();
break;
case eFruit:
food = new Fruit();
break;
}
shared_ptr<Food> ptr(food);
allTheFood.push_back(ptr);
return weak_ptr<Food>(ptr);
}
};
int foo(){
weak_ptr<Fruit> fruit = dynamic_cast<weak_ptr<Fruit> >(myFoodFactory->createFood(eFruit));
if(shared_ptr<Fruit> fruitPtr = fruit.lock())
fruitPtr->someFruitFunction();
}
が、問題はdynamic_castをiはオブジェクトが指していることを知っていれば、私はweak_ptr<Food>
の外にweak_ptr<Fruit>
を得るのですかweak_ptrを
で動作するようには思えないということです派生型のですか?
この質問がリンク先と重複している場合は、このリンクに記載されているように質問にフラグを立ててください。 – BoltClock