C++ boost深层拷贝:: shared_ptr
问题描述:
我想为C++ boost :: shared_ptr做深层拷贝。C++ boost深层拷贝:: shared_ptr
struct A{
boost::shared_ptr<const Data> dataPtr;
A(const A& aSource) {
dataPtr.reset(new const Data);
*dataPtr = *(aSource.dataPtr);
};
但是,我得到了错误: 错误:未初始化的常量“const的结构A的“新”
如果我不想放弃const的,如何处理?
任何帮助将不胜感激。
谢谢!
答
这是因为您试图通过const
引用来修改(特别是分配)值(因为这是对引用shared_ptr
至const
的引用)。假设Data
已经拷贝构造函数,你应该重写你的程序是这样的:
struct A
{
boost::shared_ptr<const Data> dataPtr;
A(A const& aSource)
{
dataPtr.reset(new Data(*(aSource.dataPtr)));
}
};
这样,dataPtr将指向一个非const数据,因为const_cast会的?谢谢 ! – 2013-02-13 16:12:36
'shared_ptr'的要点是避免深度复制。如果你想深度复制,你需要一个不同的指针类型。 (你也需要一个关于如何进行深层复制的约定,一个'Base *'实际上可以指向一个'派生',而'派生'必须被复制。 – 2013-02-13 16:32:58