gpt4 book ai didi

c++ - 一个类型是否应该只 move ,仅仅因为复制可能很昂贵?

转载 作者:可可西里 更新时间:2023-11-01 15:49:19 27 4
gpt4 key购买 nike

我有一个可复制的类型,但复制成本可能很高。我已经实现了 move 构造函数和 move 赋值。但是我遇到了性能问题,人们在按值传递时忘记调用 move()。

删除复制构造函数并为实际需要复制的罕见情况提供显式 copy() 方法是否是一种好的 C++11 风格?这在其他语言(Ruby、JavaScript)中是惯用的,但我不知道 C++ 标准库中有任何内容纯粹为了性能而禁止复制。例如,std::vector<> 是可复制的,而 std::unique_ptr<> 和 std::thread 由于其他原因是不可复制的。

最佳答案

Should a type be move-only, just because copying may be expensive?

。如果您的类型的语义使得复制它在概念上有意义,那么使复制可用的正确方法是实现复制构造函数,并让用户有机会采用标准语法来调用它:

T a;
T a = b;

如果人们会忘记从他们不想再使用的对象上移开......好吧,那是他们的坏处:

T c = std::move(a); // I'm doing it right (if I no longer need object a);
T d = b; // If I don't need b anymore, I'm doing it wrong.

如果(出于任何原因)对于您的某些函数,总是希望调用者提供一个可以从中 move 的对象,那么让该函数接受一个右值引用:

void foo(my_class&& obj);

my_class a;
foo(a); // ERROR!
foo(std::move(a)); // OK

关于c++ - 一个类型是否应该只 move ,仅仅因为复制可能很昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15855174/

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