Я довольно новичок в мире указателей и столкнулся с проблемой в моем коде. У меня есть фабричный класс, который выплевывает shared_ptr. «Entity» является базовым классом для любого типа shared_ptr, который создается из этого метода.
Если я перезаписываю указатель в методе get_entity, кажется, все работает. Если я перезаписываю указатель в методе get_pointer, это не так.
//
// typedef boost::shared_ptr<Entity> EntityPtr;
Entity::EntityPtr EntityFactory::get_entity(int type) {
// My default pointer if everything else falls through
Entity::EntityPtr e = boost::make_shared<Entity>(type);
std::cout << e->get_type() << std::endl; // Entity
switch (type) {
case 1:
// This works
e = boost::make_shared<TextEntity>(type);
std::cout << e->get_type() << std::endl; // TextEntity
break;
case 2:
// This doesn't work
get_pointer(e, type);
std::cout << e->get_type() << std::endl; // Entity
break;
}
return e;
}
// This function can (possibly) overwrite the passed-in pointer
void EntityFactory::get_pointer(Entity::EntityPtr e, int type) {
// ...
e = boost::make_shared<TextEntity>(type);
// ...
}
Мои причины для передачи "e" в метод get_pointer были в том, что мне не всегда нужно изменять указатель. В некоторых случаях get_pointer завершается без изменения указателя вообще.
Я надеюсь, что кто-то может помочь пролить свет на то, что я делаю здесь неправильно. Спасибо!