作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个可复制的类型,但复制成本可能很高。我已经实现了 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/
我将 XMonad.Hooks.DynamicLog 中的 dynamicLogWithPP 与 dzen2 一起用作 xmonad 下的状态栏。我想在栏中显示的内容之一是当前播放轨道的剩余时间(如果
我是一名优秀的程序员,十分优秀!