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を使用しstd::shared_ptrて宣言し、コンストラクターで初期化する必要がありますか?TestGet_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_TTestGet

于 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 に答える