0%

在 C++ 中类的构造函数中使用 this 指针

遇见一个有趣的问题。

C++ 里面,在类的 constructor 当中使用 this 指针访问成员,是否是安全的?在哪些情况下安全?在哪些情况下不安全?

Ao Shen 给了一个标准答案,跟我之前的认知一致:只要对类内成员初始化顺序,以及对基类子类初始化顺序熟悉,就很容易理解了。

因为类内成员初始化顺序和类内成员声明顺序一致,基类总是在子类之前初始化。所以

  • 在父类初始化列表当中,使用 this 引用更早声明的变量初始化是安全的。
  • 在父类构造函数体当中,使用 this 指针引用类内成员是安全的(不包括子类成员)。
  • 在父类构造函数体当中,down-cast this 指针为子类指针,这一行为本身是安全的;但是使用 down-casted 指针访问子类成员是不安全的。
  • 在子类初始化列表当中,使用 this 指针引用父类成员总是安全的。
  • 访问函数的情况,则看对应的函数访问的类内成员是否已经初始化。
俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。