c++ - 仅使用移动语义复制对象

标签 c++ c++11 rvalue-reference

首先,让我带你们进入我的思想高速公路(简单地说,我只是在想象这些事情)

假设,我正在使用使用移动语义(右值引用)的第三方库类。这是它的定义:

class VeryHeavyObject {
    VeryHeavyObject(const VeryHeavyObject& obj); // copy constructor
    VeryHeavyObject& operator= (const VeryHeavyObject& obj); // copy operator

public:
    VeryHeavyObject(); // constructor

    VeryHeavyObject(VeryHeavyObject&& obj); // move constructor
    VeryHeavyObject& operator= (VeryHeavyObject&& obj); // move operator

    // ....
};

显然,作者非常关心复制VeryHeavyObject 的成本,并决定强制移动所有内容(更显然,他不知道如何设计具有移动语义的类)。但是,在我的代码的某些地方,我需要有一个 VeryHeavyObject拷贝

嗯,核心问题是: 我如何复制一个只有一个移动构造函数和一个移动运算符的对象?

P.S.:我已经试过了,但我无法真正联系到图书馆的作者(我认为他正在度假)。

最佳答案

你不能。

但是,如果您有足够的权限访问它的内部结构(getter 等),那么您可以自己构造一个克隆

关于c++ - 仅使用移动语义复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13601516/

相关文章:

c++ - 将 qsort() 与类指针一起使用

c++ - 在 shared_ptr 的自定义删除器中检查 nullptr 是否有意义?

c++ - 在 C++11 中声明多参数构造函数的最佳方法是什么

c++ - 智能感知 : cannot open source file 'example.h'

c++ - 在 Boost Test 中使用枚举类

c++ - boost::thread 和 std::thread 兼容性问题?

c++ - 在 C++11 中按值返回构造对象时避免调用复制构造函数

c++ - 具有功能的通用引用

c++ - 为什么 `std::istream_iterator` 没有右值构造函数?

c++ - 映射可变参数模板参数