2012-10-01 69 views
1
 class TestGet : public ::testing::Test 
     { 
     protected: 
      TestGet() 
       : _txHandle(11) 
      { 
       _interface.get = mockGet; 
      } 

      Interface_T _interface; 
      Handle_T _txHandle; 
      DB _db; 
     }; 

如果我改變DB,使其只具有下面的構造:正在初始化類成員依賴於其他類的成員

 explicit DB(Interface_T& _interface): 
      _interface(interface) 
     { 
     } 

我現在就需要在我的TestGet類使用std::shared_ptr申報_db,在構造函數中用_interface初始化它?

UPDATE:

的問題是,我有:

private: 
     Interface_T _interface; 
在DB類,而不是一個參考

+2

你的問題有點含糊。究竟是什麼問題?在_txHandle(11)之後會添加DB(_interface)嗎? – CrazyCasta

回答

2

這應該工作:

TestGet() 
: _interface() 
, _txHandle(11) 
, _db(_interface) 
{ 
    _interface.get = mockGet; 
} 

這要看,不過,中DB構造是否做任何事情不平凡。只要它只是存儲參考,這應該沒問題。也就是說,DB應該是這樣的:

struct DB 
{ 
    Interface_T & _interface; 
    explicit DB(Interface_T & interface) : _interface(interface) { } 
}; 

如果您需要進一步的初始化,您既可以添加init()功能DB,或者作出Interface_T一個初始化函數,你可以在TestGet的構造函數中使用。

+0

如果數據庫要獲取_interface的所有權,該怎麼辦?換句話說,如果它通過值而不是通過引用來存儲接口? – Baz

+0

@Baz:那麼這將是一個完全不同的問題:-)(另外,'鼻涕是什麼'取得所有權'的意思。) –

1

我現在需要聲明_db使用一個std :: shared_ptr的我TestGet類

不,你不能離開它,因爲它是,但你必須在初始化初始化所有TestGet構造函數的列表。

TestGet() : 
_txHandle(11), 
_db(someInterface) 
{ 
    _interface.get = mockGet; 
}