2017-02-15 21 views
1

Мы так C++ 11 наделена довольно полный набор типов смарт-указатель:Практический код-дружественное имя для не владеющих смарт-указатель

  • станд :: shared_ptr
  • станд :: weak_ptr
  • станд :: unique_ptr
  • станд :: auto_ptr (устаревшее)

Но отсутствует смарт-указатель без собственности, интегрированный ти выше.

Это, по-видимому, приводит обсуждения разработчиков к довольно разрозненной классификации, которая обычно имеет такие фразы, как «это не-владеющий смарт-указатель». Но это нехорошее имя, которое я хочу использовать для обозначения шаблона-указателя-обертки в моем коде.

Есть ли какие-либо предложения относительно лучшего кода для не-владеющего смарт-указателя?

template<typename T> 
struct NonOwningSmart_pointer; 

Существует std :: weak_ptr, который на самом деле не заполняет требования, так как для этого требуется shared_ptr.

Обновление: основное преимущество присвоения имени этого интеллектуального указателя однозначно - это ясность кода, построение до nullptr и хорошая игра с другими типами указателей std.

+4

Как слабый указатель отличается от этого «NonOwningSmart_pointer»? –

+0

std :: weak_ptr всегда ассоциируется с std :: shared_ptr, как я понимаю. Но есть std :: unique_ptr, а также raw. – Jojje

+2

Зачем вам в первую очередь нужен не-владеющий умный указатель? Какая польза от простого указателя? – SergeyA

ответ

4

Существовал даже предложение что-то вроде этого: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf

Там он был назван «observer_ptr».
Предложение отклонено, но та же идея была обсуждена (с несколько более положительной обратной связью) в списке рассылки Boost совсем недавно.

+0

Владельцы и наблюдатели, и этот средний уровень слабый. Да, мне кажется, мне это нравится, лучше всего. – Jojje

+3

«N4282: предложение для самой невероятной смарт-указатель мира, v4» - заголовок сделал мой день;) – PiotrNycz

1

Руководящие принципы C++ Core, по-видимому, предлагают использовать необработанные указатели для указателей, не являющихся владельцами. Я предполагаю, что технически они говорят, что используют интеллектуальные указатели, чтобы указать право собственности, и предположить, что необработанные указатели не являются собственностью. Я предполагаю, что это не исключает использование умного указателя для указателя, не являющегося владельцем, но я не вижу, какую пользу это обеспечит.

+1

Преимущество в том, что вы видите указатель и сразу же знаете, что он не владеет. Если это просто «T *», вам нужно проверить код или документацию, чтобы узнать. –

+0

Также не все необработанные указатели касаются жизни объекта и собственности. Я всегда использую какой-то тип, чтобы выяснить, в какую роль находится указатель. – Jojje

+0

@ChristianHackl: Нет, если вы следуете основным рекомендациям. Если вы видите 'T *', то вы знаете, что это не владеющий указатель. –

 Смежные вопросы

  • Нет связанных вопросов^_^