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)
{
}
我现在需要在_db
类中使用std::shared_ptr
声明TestGet
,并在构造函数中使用_interface
进行初始化吗?
更新:
问题是我有:
private:
Interface_T _interface;
在DB类中而不是引用。
答案 0 :(得分: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
的构造函数中使用的初始化函数}。
答案 1 :(得分:1)
我现在需要在TestGet类中使用std :: shared_ptr声明_db
不,你可以保持原样,但你必须在所有TestGet
构造函数的初始化列表中初始化它。
TestGet() :
_txHandle(11),
_db(someInterface)
{
_interface.get = mockGet;
}