这个指针和构造函数

时间:2013-02-14 04:12:43

标签: c++

我可以在构造函数完成之前在类外安全地使用这个指针(我不是指构造函数的虚函数调用)吗?

我的意思是这样的:

#include <iostream>

class Bar;

class Foo
{
public:
   Foo(Bar* bar);
};

class Bar
{
public:
   Bar() : instance(this) {}
   void foo()
   {
      std::cout << "Bar::foo() \n";
   }

private:
   Foo instance;
};

Foo::Foo(Bar* bar)
{
   bar->foo(); // UB or not
}

int main()
{
   Bar instance;
}

当我尝试在MSVC-11.0中编译此代码时,我收到以下警告

  

警告C4355:'this':用于基本成员初始化列表

这样的代码怎么样?

#include <iostream>

class Foo;

void bar(Foo* instance);

class Foo
{
public:
   Foo()
   {
      bar(this);
   }

   void foo()
   {
      std::cout << "Foo::foo() \n";
   }
};

void bar(Foo* instance)
{
   instance->foo(); // UB or not
}

int main()
{
   Foo instance;
}

我无法从标准中找到任何引用。

1 个答案:

答案 0 :(得分:1)

在第二个示例中Foo ctor或bar函数调用带有{strong>仍然未初始化成员 {{ 1}} / Bar。我会稍微改编你的第一个例子来证明:

Foo