我有两个具有父子关系的类(Parent
类“has-a”Child
类)和 Child
类有一个返回 Parent
的指针。在构造 child 时初始化父指针会很好,如下所示:
class Child;
class Parent;
class Child
{
public:
Child (Parent* parent_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(this) {};
private:
Child child;
}
现在,我知道人们建议不要在初始化列表中使用 this
和 C++ FAQ说我会收到编译器警告(顺便说一句,在 VS2010 上,我没有收到警告),但我真的更喜欢这样,然后在 Parent
的构造函数中调用一些 set 函数。我的问题是:
- 在创建
Child
对象时,父this
指针是否明确定义? - 如果是这样,为什么按上述方式使用它被认为是不好的做法?
谢谢,
博阿斯
编辑:感谢 Timbo,它确实是 duplicate (呵呵,我什至选择了相同的类名)。所以让我们获得一些附加值:引用怎么样?是否可以/安全地执行以下操作? :
class Child
{
public:
Child (Parent& parnet_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(*this) {};
private:
Child child;
}
最佳答案
是的。在初始化列表中使用 this
指针是安全的只要它不用于直接或间接访问未初始化的成员或虚函数,因为对象尚未完全建。 child
对象可以存储 Parent
的 this
指针以备后用!
关于c++ - 在初始化列表中使用 "this"指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058349/