我面临以下问题:
我想把_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;
}
感谢您的建议和解决方案!
我怀疑您的目标是拥有一个与两个“非托管”成员共享(最初)的“句柄”向量。
应该是这样的:
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;
};
应在构造函数中移动_currunmanaged和_extunmanaged的赋值