使用默认构造函数的复制构造函数的类的常规解决方案

时间:2016-12-11 09:24:42

标签: c++ copy-constructor

是否存在类字段的通用包装器,在复制时(初始化和赋值)使用默认构造函数(或其他构造函数)而不是实际复制数据?

一个(非满意的)解决方案:

在包含类中实现了复制构造函数:

class Containing {
public:
    Containing(const Containing &other) : o1(), o2(other.o2) {};
private:
    Object o1;
    OtherObject o2;
};

缺点: 我必须明确定义副本c' tor。

第二(非满意)解决方案:

std::unique_ptr类似,我可以实现一个指针,在复制时只使用默认构造函数。例如:

template<typename T>
class copyable_unique_ptr {
public:
    copyable_unique_ptr(const copyable_unique_ptr<T> &other) : p = make_shared<T>() {}
private:
    std::unique_ptr<T> p;
};

缺点: 在不必要的情况下使用动态分配的内存。

第三种解决方案(通过评论建议):

与第二种解决方案相同,但不使用指针和动态内存:

template<typename T>
class defaultly_copyable_wrapper {
public:
    defaultly_copyable_wrapper(T &o) : o(o) {}
    defaultly_copyable_wrapper(const defaultly_copyable_wrapper<T> &other) : o() {}
private:
    T o;
};

到目前为止,这看起来是最佳解决方案。

是否有更好的解决方案(或标准化的第三种解决方案)?那不是常见的用例吗?

0 个答案:

没有答案