2015-05-26 109 views
1

我有一個類,它看起來像這樣,返回一個空的智能指針

class A 
{ 
    std::shared_ptr<Type> ret; 
public: 
    A() 
    { 
    ret=std::shared_ptr<Type>(new Type); 
    } 
    std::shared_ptr<Type> GetTypeA(){return ret;} 
    A (const A&a) 
    { 
    .... 
    ret=a.ret; 
    } 
}; 

class Type 
{ 
    A aa; 
public: 
    Type(A*a):aa(*a){} 

}; 

某處在客戶端代碼,我這樣調用

void func(A*pA) 
{ 
... 
    std::shared_ptr<Type> spT=pA->GetTypeA(); 
... 
} 

調試方法GetTypeA我表明spT=empty後電話。但在pA內,ret值不爲空。

+7

發佈[MCVE](http://stackoverflow.com/help/mcve) –

+0

「class A」的副本構造函數在哪裏? – Jagannath

+0

@Jagannath我更新了我的帖子。請重新閱讀。 –

回答

1

我注意到在你的代碼的一些錯誤:

A() 
{ 
    ret=std::shared_ptr<Type>(new Type); 
} 

「新類型」意味着您致電類型的默認構造函數(類型::類型()),和你沒有你的樣品中寫。嘗試「新類型(* this)」來使用你自己的構造函數。 但要做到這一點,你需要你的類型類更改爲:

class Type 
{ 
    A* aa;      // Use a pointer 

public: 
    Type::Type(A&a) :aa(&a){} // Use references 
}; 

的問題是它沒有解決「遞歸方面」,取決於你的需要,我會在Type類使用靜態參照。 ..