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)
只需使用隐含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(){…
.)