私は次の問題に直面しています:
_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;
}
提案と解決策をありがとう!
あなたが目指しているのは、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]
コメントを追加