c++ - C++:替代没有赋值的构造函数初始化列表?
问题描述
我面临以下问题:
我想将 _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;
};
推荐阅读
- android - 默认小部件属性如何继承?
- flutter - Flutter 将 ThemeData 背景设置为 LinearGradient
- python - 如何在 Ubuntu 16.04 中模拟 xbox 360 控制器
- python - Qt - 在所有小部件上方显示小部件或标签
- r - 新的整洁的 eval 大括号 {{ }} 有什么作用?跨函数传递参数并使用 as_label
- regex - 返回第一个和第五个反斜杠之间的数据
- php - 如何在 php 中注销特定帐户(用户)?
- python - Python,将项目附加到列表不起作用
- html - flex 显示是否影响 img 高度?
- php - 使用 XDebug 和 XAMPP 从 NetBeans 调试 PHP