首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式生成移动构造函数

隐式生成移动构造函数
EN

Stack Overflow用户
提问于 2012-11-21 15:51:18
回答 1查看 1.2K关注 0票数 1

是否有任何方法可以隐式生成仅移动类的移动构造函数?假设有这样一个类:

代码语言:javascript
复制
class moveable_only
{
  unique_ptr<int> p_;
};

moveable_only m;
foo(std::move(m));

这不编译,因为隐式声明的复制构造函数不能复制p_。(12.8/7)

如果类定义没有显式声明副本构造函数,则将隐式声明一个副本构造函数。如果类定义声明了一个移动构造函数或移动赋值操作符,则隐式声明的复制构造函数被定义为已删除;否则,它被定义为defaulted (8.4)。

现在考虑这一点:

代码语言:javascript
复制
class moveable_only
{
  unique_ptr<int> p_;
  
   moveable_only(const moveable_only&);
   moveable_only& operator = (const moveable_only&);
};

moveable_only m;
foo(std::move(m));

这也不能编译,因为12.8/9

如果类X的定义没有显式声明移动构造函数,则将隐式声明为defaulted当且仅当 -X没有用户声明的复制构造函数, -X没有用户声明的副本赋值操作符, -X没有用户声明的移动赋值操作符, -x没有用户声明的析构函数,并且 -移动构造函数不会被隐式定义为已删除。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 15:54:04

这不编译,因为隐式声明的复制构造函数不能复制p_。(12.8/7)

不需要复制构造函数。这并不能编译,因为编译器似乎不会自动生成一个移动构造函数,而它应该这样做。

除了自己实现它或更新编译器之外,没有别的办法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13496956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档