我对指针世界很新,并且在我的代码中遇到了问题。我有一个吐出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完成而根本不修改指针。
我希望有人可以帮助我解释一下我在这里做错了什么。谢谢!
答案 0 :(得分:0)
由于你将整数传递给make_shared,我对你尝试做的wtf非常困惑。
您可以通过在Entity::EntityPtr
中接受对get_pointer
的引用来解决您的问题。