gpt4 book ai didi

c++ - 在初始化列表中使用 "this"指针是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:27 26 4
gpt4 key购买 nike

我有两个具有父子关系的类(Parent 类“有一个”Child 类)和Child类有一个指向 Parent 的指针。在构造子项时初始化父指针会很好,如下所示:

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 可以存储Parentthis 指针供以后使用!

关于c++ - 在初始化列表中使用 "this"指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com