C ++:代入なしのコンストラクタ初期化子リストの代替?

PythonLinski

私は次の問題に直面しています:

_partHandlePtrを_currUnmanagedおよび_extUnmanagedのコンストラクターに渡したいのですが、「アクセスできないデータを読み取ろうとしたときに、アドレス0x00000010でメモリアクセス違反が発生しました」などのエラーが発生します。また、2)の後に両方のインスタンスを初期化しようとしましたが、問題は、それらで代入演算子を使用できないことです。それで、リストの初期化を使用せずに_currUnmanagedと_extUnmanagedを初期化する別のオプションがありますか、それとも他の場所で問題がありますか?

class DerivedCollect {

    DerivedCollect(
        const IGCollect& inputCollect,
        Handle handle) :
        _partHandlePtr(nullptr),
        _currUnmanaged(_partHandlePtr),
        _extUnmanaged(_partHandlePtr)
    {
        // 1) Filling _pHandles 

        _pHandles.push_back(HandleManager::GetPHandle(handle));

        for (const auto& it : inputCollect.GetPartHandles())
        {
            _pHandles.emplace_back(it);
        }

        // 2) Make _partHandlePtr referencing to _pHandles 

        _partHandlePtr = std::make_shared<std::vector<Handle>>(_pHandles);
    }

private:
    std::shared_ptr<std::vector<Handle>> _partHandlePtr;
    std::vector<Handle> _pHandles;
    UnmanagedCollect _currUnmanaged;
    UnmanagedCollect _extUnmanaged;
}
class UnmanagedCollect {
    UnmanagedCollect(
        std::shared_ptr<std::vector<Handle>> partHandlePtr) :
        _partHandlePtr(partHandlePtr)
    {
    }
private:
    std::shared_ptr<std::vector<Handle>> _partHandlePtr;
}

提案と解決策をありがとう!

molbdnilo

あなたが目指しているのは、2つの「管理されていない」メンバーと(最初は)共有される「ハンドル」の1つのベクトルを持つことだと思います。

これは次のようになります。

class DerivedCollect 
{
    DerivedCollect(
        const IGCollect& inputCollect,
        Handle handle) :
        _partHandles(std::make_shared<std::vector<Handle>()),
        _currUnmanaged(_partHandles),
        _extUnmanaged(_partHandles)
    {
        _partHandles->emplace_back(HandleManager::GetPHandle(handle));

        for (const auto& it : inputCollect.GetPartHandles())
        {
            _partHandles->emplace_back(it);
        }
    }

private:
    std::shared_ptr<std::vector<Handle>> _partHandles;
    UnmanagedCollect _currUnmanaged;
    UnmanagedCollect _extUnmanaged;
};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

c ++:初期化子リスト順のコンストラクター

分類Dev

C ++コンストラクタ初期化子リストのテンプレート配列の初期化

分類Dev

C ++の初期化子リストとクラスの初期化。引数なしのコンストラクターがありますが、初期化リストを使用する必要がありますか?

分類Dev

C ++の初期化子リストとクラスの初期化。引数なしのコンストラクターがありますが、初期化リストを使用する必要がありますか?

分類Dev

C ++は、他のパラメーターを持つコンストラクターの初期化子リストを取得します

分類Dev

const型のコンストラクタ初期化子のC ++正しい入力検証

分類Dev

C ++ 11の統一された初期化:初期化子リストと複数パラメーターコンストラクターの間のあいまいさ?

分類Dev

複雑な割り当てを持つc ++コンストラクタ初期化子リスト

分類Dev

C3321:このコンテキストでは初期化子リストは予期しないものです

分類Dev

C ++コンストラクタ初期化子リストで非組み込み型の配列を初期化するにはどうすればよいですか?

分類Dev

C ++のムーブ代入は、最初にムーブコンストラクターをトリガーします

分類Dev

C ++ 11メンバー初期化子リストとクラス内初期化子?

分類Dev

C#コンストラクターでの初期化が機能しない

分類Dev

C#オブジェクト初期化子-コンストラクター呼び出しの括弧を含めますか?

分類Dev

C ++のコンストラクター内での変数の宣言と代入

分類Dev

'using std :: foo'ディレクティブをコンストラクター初期化子リストにローカルに適用します(C ++)

分類Dev

C ++のクラスコンストラクターでのリストの初期化

分類Dev

C ++は、初期化リストの外部で親コンストラクターを明示的に呼び出します

分類Dev

コンストラクターc ++の異なるクラスへのポインターの初期化

分類Dev

C ++で、初期化子リストで基本クラスのテンプレート引数を繰り返す必要があるのはなぜですか?

分類Dev

複雑な構造のC ++初期化子リスト

分類Dev

C ++:Stroustrupの例を使用したコンストラクター/代入の移動に関する質問

分類Dev

c++ - 抽象クラスおよび仮想コンストラクタの代替

分類Dev

配列としてのc ++ 11初期化子リスト

分類Dev

コンストラクター内のすべてのメンバーを初期化しないクラスをC ++ 11で初期化する方法

分類Dev

C ++コンストラクタ初期化リストのC構造体コピー

分類Dev

このリスト初期化子の動作は、Visual Studio C#コンパイラのバグとして報告する必要がありますか?

分類Dev

C ++:ネストされた構造体のフラット初期化子リスト?

分類Dev

親の初期化が機能するのに、コンストラクタ初期化リストのC ++ 11中括弧の初期化が機能しないのはなぜですか?

Related 関連記事

  1. 1

    c ++:初期化子リスト順のコンストラクター

  2. 2

    C ++コンストラクタ初期化子リストのテンプレート配列の初期化

  3. 3

    C ++の初期化子リストとクラスの初期化。引数なしのコンストラクターがありますが、初期化リストを使用する必要がありますか?

  4. 4

    C ++の初期化子リストとクラスの初期化。引数なしのコンストラクターがありますが、初期化リストを使用する必要がありますか?

  5. 5

    C ++は、他のパラメーターを持つコンストラクターの初期化子リストを取得します

  6. 6

    const型のコンストラクタ初期化子のC ++正しい入力検証

  7. 7

    C ++ 11の統一された初期化:初期化子リストと複数パラメーターコンストラクターの間のあいまいさ?

  8. 8

    複雑な割り当てを持つc ++コンストラクタ初期化子リスト

  9. 9

    C3321:このコンテキストでは初期化子リストは予期しないものです

  10. 10

    C ++コンストラクタ初期化子リストで非組み込み型の配列を初期化するにはどうすればよいですか?

  11. 11

    C ++のムーブ代入は、最初にムーブコンストラクターをトリガーします

  12. 12

    C ++ 11メンバー初期化子リストとクラス内初期化子?

  13. 13

    C#コンストラクターでの初期化が機能しない

  14. 14

    C#オブジェクト初期化子-コンストラクター呼び出しの括弧を含めますか?

  15. 15

    C ++のコンストラクター内での変数の宣言と代入

  16. 16

    'using std :: foo'ディレクティブをコンストラクター初期化子リストにローカルに適用します(C ++)

  17. 17

    C ++のクラスコンストラクターでのリストの初期化

  18. 18

    C ++は、初期化リストの外部で親コンストラクターを明示的に呼び出します

  19. 19

    コンストラクターc ++の異なるクラスへのポインターの初期化

  20. 20

    C ++で、初期化子リストで基本クラスのテンプレート引数を繰り返す必要があるのはなぜですか?

  21. 21

    複雑な構造のC ++初期化子リスト

  22. 22

    C ++:Stroustrupの例を使用したコンストラクター/代入の移動に関する質問

  23. 23

    c++ - 抽象クラスおよび仮想コンストラクタの代替

  24. 24

    配列としてのc ++ 11初期化子リスト

  25. 25

    コンストラクター内のすべてのメンバーを初期化しないクラスをC ++ 11で初期化する方法

  26. 26

    C ++コンストラクタ初期化リストのC構造体コピー

  27. 27

    このリスト初期化子の動作は、Visual Studio C#コンパイラのバグとして報告する必要がありますか?

  28. 28

    C ++:ネストされた構造体のフラット初期化子リスト?

  29. 29

    親の初期化が機能するのに、コンストラクタ初期化リストのC ++ 11中括弧の初期化が機能しないのはなぜですか?

ホットタグ

アーカイブ