我正在尝试使用以字符串作为参数的公共函数来返回类指针。我不确定它是如何完成的(正确的方法)。这就是我所拥有的:
Room::Room* getPointer(const string &nameOfRoom){
return &Room();
}
如果我使用这个构造,我是否返回正确的指针或指向我的函数正在创建的新实例的指针? 谢谢
对不起每个人都不清楚我的意图。我有一个房间,里面有一些指向其他房间的指针。在我看来,应该看起来像一个图(希望它是一个)。我有一个字符,通过使用列表中的指针“导航”图形。我以字符串的形式获得用户的输入。如果我的用户说“搬到卧室”,我想将“卧室”作为参数传递给一个函数,这样我就能以某种方式获得指向我列表中卧室的指针。
我不确定我是否正确解释了,所以请原谅“新生”并缺乏先前的解释
谢谢
答案 0 :(得分:3)
如果你的意思是试图将指针返回到一个对象,那么就这样做。
Room* getP(const std::string& sfasd)
{
return this;
}
然而,在语义上这样做更好:
Room& getP(const std::string& sfasd)
{
return *this;
}
你也可以这样做:
Room r;
Room *rp=&r;
最后,如果你的意思是创建一个新的房间,你可以做
Room& getP(const std::string& name)
{
return new Room(name);
}
::://else where
std::unique_ptr<Room> room_pointer(getP("hi"));
答案 1 :(得分:1)
不,这绝对是错的。大多数编译器都应该警告你。我完全不确定你的函数的预期语义是什么,因为你还不是很清楚它,但这绝对不是它。
答案 2 :(得分:0)
目前尚不清楚你要做什么。 但首先,你的函数返回一个基于堆栈的变量的地址是坏的,因为一旦函数返回你的指针将是无效的。
顺便说一下,你通过传递字符串而不是使用它来浪费堆栈空间....如果你使用的是microsoft编译器,你可以打开4级警告(默认情况下不启用)它会发出一个警告。
如果您想创建Room的新实例,只需执行以下操作:
Room* Room::getPointer()
{
return new Room();
}
所以再一次,我不确定你想要什么,所以我只能猜到这一点。