Как ненавязчивые интеллектуальные указатели ведут себя в отношении наследования и множественного наследования?

Я использую C ++. C ++ 0x с использованием Visual Studio 2010, чтобы быть правильным.

Предположим, у меня есть класс Z. Чтобы в моем приложении было безопаснее работать с указателями на этот класс, я могу последовательно использовать интеллектуальные указатели (общий указатель, слабый указатель) .

Теперь этот класс Z наследуется от класса X. Некоторые части моего приложения будут работать с указателями на класс X, другие будут работать с указателями на класс Z.

  • Могу ли я по-прежнему использовать интеллектуальные указатели?
  • Могу ли я использовать интеллектуальные указатели? общие указатели все еще работают, если у меня есть некоторые, которые относятся к 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 .

  • Могу ли я по-прежнему использовать общие указатели таким образом?
  • Гарантируется ли, что только последний интеллектуальный указатель (независимо от того, указывает ли он на X, Y или Z) удалит экземпляр?

Автор Кстати, как я могу безопасно преобразовать один интеллектуальный указатель в другой, например преобразовать std :: shared_ptr в std :: shared_ptr ? Это работает? Разрешено ли это?

Обратите внимание, что я явно ссылаюсь на ненавязчивые указатели (как новые std :: shared_ptr и std :: weak_ptr в C ++ 0x). При использовании навязчивых указателей (например, в Boost) вероятно, это работает, поскольку сам экземпляр отвечает за ведение счетчика.

5
задан Kate Gregory 13 October 2010 в 16:41
поделиться