posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

问题 

class A; 
 
class B { 
public
    B(A
& a) : a(a) {} 
private
    A
& a; 
}; 
 
/* Method 1 */ 
/* warning C4355: 'this' : used in base member initializer list */ 
/* 
class A { 
public: 
    A() : b(*this) {} 
 
private: 
    B b; 
}; 
*/ 
 
/* Method 2 */ 
/* But I need to manually perform memory dellocation. */ 
class A { 
public
    A() { b 
= new B(*this); } 
    
~A() { delete b; } 
 
private
    B
* b; 
}; 
 
int main() { 
//解决办法
struct bar; 
 
struct foo 

    foo(bar
& pX) : 
    mX(pX) 
    {} 
 
    bar
& mX; 
}; 
 
struct bar 

    bar(
void) : 
    mX(self()) 
    {} 
 
    foo mX; 
 
private
    bar
& self(void
    { 
        
// fools the warning 
        return *this
    } 
};