首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可移动的,但不可复制的

可移动的,但不可复制的
EN

Stack Overflow用户
提问于 2016-09-21 04:36:04
回答 2查看 1.2K关注 0票数 2

是否可以创建类类型,即:

  • 可移动的,但不是可复制的,但仍然是可复制的
  • 可复制的,但不是可移动的,但仍然是可移动的
  • 小复制-可转让,但不是微不足道的移动-可转让,但仍可移动-可转让
  • 小移动-可转让,但不是小复制-可转让,但仍然复制-可分配
  • 小复制/移动-可构造的,但不是微不足道的复制/移动-可分配的,但仍然复制/移动-可分配的,反之亦然。
  • 等(如有的话)

他们会是什么样的?

这个问题对于开发std::variant-like或std::tuple-like类是有意义的。

这个问题是在通过这篇文章后提出的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-21 08:01:45

来回答我认为是你问题的核心:

这个问题对于开发std::variant或std::tuple类类是有意义的。

这里有三种不同的类类型。

  • 所有者类型
  • 正规类型
  • 其他类型(函数、突变体)

在下面的假设中,“赋值&构造”后缀都是用于移动/复制的。我将把非平凡的操作称为克隆:

所有者类型:这些是可移动的&可复制的(深拷贝或浅拷贝是要做的选择)刻板印象的例子是std::unique_ptr, std::shared_ptr

正则类型(int-like):-这些是可移动和可复制的。典型的例子是int,std::vector。有关这些类型的更多细节,可以在什么是移动语义上下文中的“正则类型”? &在编程元素中找到。

其他类型(函数、Mutexes等):这些类型拒绝放入上面的清洁类中。函数可以引用指针、具有捕获信息的lambda等。

至于所有其他的组合的琐碎复制/移动是关心的,而你可以创建这样的类,我认为他们更像好奇心,而不是你会看到的东西,在任何有用的场景。

我将std::向量放在常规类型中,而不是所有者类型中,尽管std::vector管理内存,因为它的接口设计得尽可能接近常规类型。您通常可以为一种表面上非规则的类型设计一个常规的接口。在这种情况下,如果使用常规接口,有关代码的推理就更容易了。

票数 1
EN

Stack Overflow用户

发布于 2016-09-21 05:02:56

你需要在5点的时候更清楚。

琐碎意味着(除其他外)不是用户提供的。因此,只需显式地编写默认实现,就可以从琐碎到非平凡的东西。

http://eel.is/c++draft/class#class!trivially可复制

http://eel.is/c++draft/class.copy#25

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

https://stackoverflow.com/questions/39607635

复制
相关文章

相似问题

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