在构造函数中创建一个指针,指向C++中的类的实例

Adr*_*ian 2 c++ constructor pointers

我对这些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)  
}
Run Code Online (Sandbox Code Playgroud)

我知道这可能听起来很疯狂(这里是新手),但我只是想知道它是否可行.有人可以向我解释一下.
非常感谢

编辑:
谢谢大家快速回答我的问题.我问,因为我想使用公共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; 
Run Code Online (Sandbox Code Playgroud)

编辑(希望最后一个):
这是否正在回归我正在寻找的东西?

Room::Room* getPointer(const string &nameOfRoom){    
    return &Room();  
}
Run Code Online (Sandbox Code Playgroud)

或者它正在返回新房间的地址?
谢谢

EdC*_*ica 11

您不需要这样做,因为您的类将具有隐式this指针

this; // can be called anywhere in your class to access yourself
Run Code Online (Sandbox Code Playgroud)


Mar*_*tos 9

只需使用隐含this参数:

ptrToSelf = this;
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好(忽略这一事实,这ptrToSelf是一个相当愚蠢的想法开始):

Room::Room() : ptrToSelf(this) { }
Run Code Online (Sandbox Code Playgroud)

编辑: @BenjaminLindley提醒我注意某些其他成员函数会出现问题.特别是,复制构造函数默认情况下不会正常运行(ptrToSelf只是从源实例复制,因此两个实例最终都会指向一个实例).因此,您可能需要提供一个确保ptrToSelf正确分配的复制构造函数.基本情况是这样的:

Room::Room(const Room& room) : ptrToSelf(this) { … }
Run Code Online (Sandbox Code Playgroud)

您还需要担心赋值运算符,但只要它只是调用复制构造函数,您就可以了.以下通用实现将起到作用:

Room& operator=(Room room) { swap(room); return *this; }
void swap(Room& room) { /* Swap rooms… */ }
Run Code Online (Sandbox Code Playgroud)

(PS:应该是class Room {…,不是class Room(){….)