我有一个在初始化时传递大型数据结构的对象:
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::move
上data
的概念,因为它需要在调用者的上下文中保持有效的对象。注意:我已经声明该成员为引用(即
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/