gpt4 book ai didi

c++ - 不可复制和 move 构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:16 25 4
gpt4 key购买 nike

我已经使一个类的成员不可复制,但我给它一个 move 构造函数和赋值运算符。然而,它不会像 vector 一样与容器打球。

class NonCopyable
{
public:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;


protected:
NonCopyable()
{
}

~NonCopyable() _NOEXCEPT
{
}
};


class Member : NonCopyable
{
public:
Member(int i) : mNum(i)
{
}
~Member()
{
}

Member(Member&& other) _NOEXCEPT : mNum(other.mNum)
{
}

Member& operator= (Member&& other) _NOEXCEPT
{
std::swap(mNum, other.mNum);
return *this;
}

private:
int mNum;
};


struct Item
{
Item(int i) : mMember(i)
{
}

Member mMember;
};



int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Item> vec;
vec.emplace_back(1);

return 0;
}

以下编译器错误:

error C2280: 'NonCopyable::NonCopyable(const NonCopyable &)' : attempting to reference a deleted function
see declaration of 'NonCopyable::NonCopyable'
This diagnostic occurred in the compiler generated function 'Member::Member(const Member &)'

为什么编译器不能识别 Member 可以 move ?我错过了什么?

编辑:Visual Studio 2013

EDIT2:我将其添加到 Item 并编译:

Item(Item&& other) _NOEXCEPT : mMember(std::move(other.mMember))
{
}

我还好吗?是吗?

最佳答案

在 VS2013 中,部分实现了默认和删除的函数以及右值引用。升级到 VS2015,根据 Microsoft 的这些功能已完全实现(您的示例编译良好)。 C++11/14/17 Features In VS 2015 RC

关于c++ - 不可复制和 move 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com