我有一个在初始化时传递大型数据结构的对象:

class foo {
public:
   foo(const BigData& data);

   command();

}


BigData的副本构造函数和副本分配运算符是私有的,这是正确的。

但是,我需要更改class foo,以便command()可以访问BigData。鉴于程序的结构,传递command(const BigData& data)非常困难,因此我想执行以下操作:

class foo {
public:
   foo(const BigData& data);

   command();
private:
   BigData m_data;
}


但是,如何在没有复制构造函数或复制分配的情况下初始化m_data?我也不喜欢std::movedata的概念,因为它需要在调用者的上下文中保持有效的对象。

注意:我已经声明该成员为引用(即const BigData& m_data),但这不能在icpc下编译:

error: foo provides no initializer for reference member "m_data"


我已经使用foo(const BigData& data) : m_data(data)以及foo(const BigData& data) { m_data = data; }

最佳答案

如何存储参考?

class foo
{
public:
   foo(const BigData& data) : m_data(data) {}
   command();
private:
   const BigData & m_data;
};

关于c++ - 解决私有(private)拷贝构造函数/拷贝分配C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23398735/

10-11 16:18