gpt4 book ai didi

c++ - 是否有可复制但不可 move 的类的用例?

转载 作者:IT老高 更新时间:2023-10-28 22:35:45 25 4
gpt4 key购买 nike

看完this recent question @Mehrdad 关于应该使哪些类不可 move 因此不可复制,我开始想知道是否有一个类的用例可以复制但不能 move .从技术上讲,这是可能的:

struct S
{
S() { }
S(S const& s) { }
S(S&&) = delete;
};

S foo()
{
S s1;
S s2(s1); // OK (copyable)
return s1; // ERROR! (non-movable)
}

虽然 S 有一个复制构造函数,但它显然没有模拟 CopyConstructible 的概念,因为那又是对 MoveConstructible 的改进概念,它需要存在(未删除的) move 构造函数(参见第 17.6.3.1/2 节,表 21)。

上面的 S 这样的类型是否有任何用例,它是可复制但不可复制 CopyConstructible 不可 move ?如果不是,为什么不禁止在同一个类中声明复制构造函数删除的 move 构造函数?

最佳答案

假设你有一个类,它的 move 成本并不比复制成本低(也许它包含一个 POD 类型的 std::array)。

从功能上讲,您“应该”使它成为 MoveConstructible,以便 S x = std::move(y); 的行为类似于 S x = y;,这就是为什么CopyConstructible 是 MoveConstructible 的子概念。通常,如果您根本不声明任何构造函数,这“就可以工作”。

在实践中,我想您可能希望暂时禁用 move 构造函数,以检测您的程序中是否有任何代码看起来比它更有效确实如此,通过 move S 的实例。对我来说,禁止这样做似乎有些过分。在完成的代码中强制执行良好的界面设计不是标准的工作:-)

关于c++ - 是否有可复制但不可 move 的类的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323093/

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