English 中文(简体)
C++ 提到正在建造的物体
原标题:C++ referring to an object being constructed
  • 时间:2009-11-02 19:23:39
  •  标签:

C++ 我提到了一个希望向其所有人指明的物体,但是,由于该物体不是建造的,我可以在含有舱位的施工中确定点。 因此,我试图做这样的事情:

class A {
   public:

     A() : b(this) {}
   private:
     B b;
};

class B {
   public:
     B(A* _a) : a(_a) {}
   private:
     A* a;
};

是否有办法确保B总是与A* 一起启动,而A* 却不持有B点人?

增 编

最佳回答

为此:

class A;

class B {
public:
  B(A *_a) : a(_a) {};

private:
  A* a;
};

class A {
public:
  A() : b(this) {};

private:
  B b;

};

自2006年以来 B完全载于A,必须首先宣布。 它需要A的协调人,因此,在你宣布B之前,你必须提前宣布A。

该法典在目前版本的g++下汇编。

问题回答

C++ 我提到了一个希望向其所有人指明的物体,但是,由于该物体不是建造的,我可以在含有舱位的施工中确定点。

你们可以储存地。

你可以做的是,试图通过B建筑商的点子接触A的成员/方法,因为母子法院不可能在以下时刻充分启动:

#include <iostream>

class Y;

class X
{
    Y* y;
public:
    X(Y* y);
};

class Y
{
    X x;
    int n;
public:
    Y(): x(this), n(42) {}
    int get_n() const { return n; }
};

X::X(Y* p): y(p)
{
    //Now this is illegal:
    //as it is, the n member has not been initialized yet for parent
    //and hence get_n will return garbage
    std::cout << p->get_n() <<  
 ;
}

int main()
{
    Y y;
}

如果您在Y的成员周围开车,那么N将先入门,X的构造者将印刷42部,但这太脆弱,无法依赖。





相关问题
热门标签