使用C ++中的公共函数返回类指针

时间:2012-03-14 23:59:16

标签: c++ pointers return

我正在尝试使用以字符串作为参数的公共函数来返回类指针。我不确定它是如何完成的(正确的方法)。这就是我所拥有的:

Room::Room* getPointer(const string &nameOfRoom){    
    return &Room();  
}  

如果我使用这个构造,我是否返回正确的指针或指向我的函数正在创建的新实例的指针? 谢谢

对不起每个人都不清楚我的意图。我有一个房间,里面有一些指向其他房间的指针。在我看来,应该看起来像一个图(希望它是一个)。我有一个字符,通过使用列表中的指针“导航”图形。我以字符串的形式获得用户的输入。如果我的用户说“搬到卧室”,我想将“卧室”作为参数传递给一个函数,这样我就能以某种方式获得指向我列表中卧室的指针。
我不确定我是否正确解释了,所以请原谅“新生”并缺乏先前的解释 谢谢

3 个答案:

答案 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();
}

所以再一次,我不确定你想要什么,所以我只能猜到这一点。