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)
        {
        }

我现在是否需要在我的类中声明_db使用 a并在构造函数中对其进行初始化?std::shared_ptrTestGet_interface

更新:

问题是我有:

    private:
        Interface_T _interface;

在 DB 类而不是引用中。

4

2 回答 2

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.

于 2012-10-01T15:29:46.620 回答
1

我现在是否需要在我的 TestGet 类中使用 std::shared_ptr 声明 _db

不,您可以保持原样,但您必须在所有TestGet构造函数的初始化列表中对其进行初始化。

 TestGet() :
 _txHandle(11),
 _db(someInterface)
 {
     _interface.get = mockGet;
 }
于 2012-10-01T15:27:32.153 回答