C++:没有赋值的构造函数初始值设定项列表的替代方案?
C++ : Alternative to constructor initializer lists without assignment?
我面临以下问题:
我想将 _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;
}
感谢您的建议和解决方案!
_currUnmanaged 和 _extUnmanaged 的赋值应该在构造函数中移动
我怀疑您的目标是拥有一个(最初)与两个“非托管”成员共享的“句柄”向量。
看起来像这样:
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;
};
我面临以下问题:
我想将 _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;
}
感谢您的建议和解决方案!
_currUnmanaged 和 _extUnmanaged 的赋值应该在构造函数中移动
我怀疑您的目标是拥有一个(最初)与两个“非托管”成员共享的“句柄”向量。
看起来像这样:
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;
};