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;
};