Я пытаюсь сделать глубокое копирование для 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 в ‘new’ of ‘const struct 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)));
}
};
Других решений пока нет …