Я использую C ++. C ++ 0x с использованием Visual Studio 2010, чтобы быть правильным.
Предположим, у меня есть класс Z. Чтобы в моем приложении было безопаснее работать с указателями на этот класс, я могу последовательно использовать интеллектуальные указатели (общий указатель, слабый указатель) .
Теперь этот класс Z наследуется от класса X. Некоторые части моего приложения будут работать с указателями на класс X, другие будут работать с указателями на класс Z.
std :: shared_ptr
или std :: shared_ptr
) удаляет экземпляр? Уверен ли я, что если я удалю std :: shared_ptr
, этот экземпляр будет храниться до тех пор, пока существует другой std :: shared_ptr
? Теперь Предположим, я использую множественное наследование, где Z наследуется от классов X и Y.
Некоторые части моего приложения будут работать с std :: shared_ptr
, другие с std :: shared_ptr
и другие с std :: shared_ptr
.
Автор Кстати, как я могу безопасно преобразовать один интеллектуальный указатель в другой, например преобразовать std :: shared_ptr
в std :: shared_ptr
? Это работает? Разрешено ли это?
Обратите внимание, что я явно ссылаюсь на ненавязчивые указатели (как новые std :: shared_ptr
и std :: weak_ptr
в C ++ 0x). При использовании навязчивых указателей (например, в Boost) вероятно, это работает, поскольку сам экземпляр отвечает за ведение счетчика.