【发布时间】:2012-03-14 22:45:13
【问题描述】:
我对这些 C++ 指针有点困惑,我想知道是否可以在构造函数中创建一个指向类实例的指针(以下内容)。
class Room{
public:
Room();
~Room();
private:
Room* ptrToSelf;
};
Room::Room(){
ptrToSelf = &(what should I write in here to have the pointer point to it)
}
我知道这听起来可能很疯狂(这里是新手),但我只是想知道这是否可能。有人可以向我解释一下吗。
非常感谢
编辑:
谢谢大家这么快回复我。我问是因为我想使用公共Room*::getPointer(); 方法来返回类的指针。我有一个从一个房间移动到另一个房间的角色,我正在使用指针来实现这一点。我以字符串的形式从用户那里获取输入,但我无法将该字符串传递给我创建的 character.moveTo(const Room*) 方法。我需要一种将字符串“转换”为类指针的方法,以便我可以将指针传递给方法。
编辑:
我正在考虑实现一种方法,该方法将根据字符串类型参数返回对象的指针:
Room::Room* getPointer(const string &nameOfRoom){
//I can't use this return statement as the following error
//Error: 'this' may only be used inside a nonstatic member function
return this;
编辑(希望是最后一个):
这是返回我正在寻找的东西吗?
Room::Room* getPointer(const string &nameOfRoom){
return &Room();
}
或者它正在返回一个新房间的地址?
谢谢
【问题讨论】:
-
说真的,你不需要持有对自己的引用,因为你总是隐式地拥有一个 this 指针,真正的问题是你为什么需要这个?
-
如果你能找到
ptrToSelf,你就不需要了。如果你需要它,你怎么知道在哪里寻找它? -
如果
ptrToSelf是一个实例成员变量,那么表达式ptrToSelf实际上是this->ptrToSelf的简写。因此,如果this不可用,ptrToSelf也是如此。我猜这个想法是从一些内部数据结构中按名称查找房间。如果是这样,那么当您找到有问题的房间时,只需返回其地址即可。顺便说一句,你不能写return &Room();。这将创建一个 Room 的临时实例,立即销毁它,然后返回它的地址。 -
很难再提供帮助,因为我不明白应该如何使用
nameOfRoom参数。您没有在任何示例代码中使用它,也没有提及您如何在程序中存储房间。
标签: c++ pointers constructor