константа shared_ptr к shared_ptr

Как можно преобразовать shared_ptr, который указывает на объект константы к shared_ptr, который указывает на объект неконстанты. Я пытаюсь сделать следующее:

boost::shared_ptr<const A> Ckk(new A(4));

boost::shared_ptr<A> kk=const_cast< boost::shared_ptr<A> > Ckk;

Но это не работает.

17
задан SCFrench 28 March 2011 в 18:17
поделиться

3 ответа

'boost :: const_pointer_cast' сделает то, о чем вы просите, но обязательная вторая половина ответа состоит в том, что вам, вероятно, не следует его использовать. В 99% случаев, когда кажется, что вам нужно отбросить свойство const переменной, это означает, что у вас есть недостаток дизайна. Иногда Const - это больше, чем просто приукрашивание витрины, и отказ от него может привести к неожиданным ошибкам.

Не зная больше деталей вашей ситуации, нельзя сказать наверняка. Но никакое обсуждение const-cast не будет полным без упоминания этого факта.

31
ответ дан 30 November 2019 в 11:08
поделиться

use boost::const_pointer_cast, documentation.

9
ответ дан 30 November 2019 в 11:08
поделиться

правильный путь должен быть таким

boost::shared_ptr<A> kk (boost::const_pointer_cast<A>(Ckk));
2
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: