Почему boost::interprocess::managed_shared_ptr в non-const не может быть преобразован в managed_shared_ptr в const

Как я понимаю, для boost::shared_ptr действует следующее:

boost::shared_ptr<SomeData> ptr;
...
boost::shared_ptr<const SomeData> c_ptr = ptr; // Valid

Такое же поведение не распространяется на boost::interprocess::managed_shared_ptr, Зачем?

1 ответ

boost::interprocess::managed_shared_ptr на самом деле не является общим указателем; это просто вспомогательный класс, который вы можете использовать для определения его типа. Из межпроцессных документов:

typedef managed_shared_ptr<MyType, managed_shared_memory>::type my_shared_ptr;

И создание общего указателя может быть упрощено до этого:

[C++]

my_shared_ptr sh_ptr = make_managed_shared_ptr (segment.construct<MyType>("object to share")(), segment);

С "sh_ptr"Из приведенного выше примера должно работать следующее:

typedef managed_shared_ptr<const MyType, managed_shared_memory>::type my_shared_const_ptr;
my_shared_const_ptr sh_c_ptr = sh_ptr;

Поскольку эти два объекта на самом деле являются общими указателями.

С другой стороны, занимаюсь:

managed_shared_ptr<MyType, managed_shared_memory> ptr;
managed_shared_ptr<const MyType, managed_shared_memory> c_ptr = ptr;

не будет работать, потому что в этом случае ptr и c_ptr являются очень простыми структурами, которые ничего не делают, кроме как сделать 3 определения типа, поэтому они не конвертируются.

Другие вопросы по тегам