初始化依赖于另一个类成员的类成员

时间:2012-10-01 15:25:03

标签: c++ class constructor initialization

        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类中而不是引用。

2 个答案:

答案 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;
 }