Запитання з тегом «smart-pointers»

Абстрактний тип даних, який імітує вказівник, надаючи додаткові функції, такі як автоматичне збирання сміття або перевірка меж

2
Чому shared_ptr <void> легальний, а unique_ptr <void> неправильно сформований?
Питання справді вкладається в заголовок: мені цікаво знати, в чому полягає технічна причина цієї різниці, а також обгрунтування? std::shared_ptr&lt;void&gt; sharedToVoid; // legal; std::unique_ptr&lt;void&gt; uniqueToVoid; // ill-formed;

2
Як повернути розумні вказівники (shared_ptr), за посиланням чи за значенням?
Скажімо, у мене є клас із методом, який повертає a shared_ptr. Які можливі переваги та недоліки повернення його за посиланням чи за вартістю? Дві можливі підказки: Раннє знищення об’єкта. Якщо я повертаю посилання shared_ptrby (const), лічильник посилань не збільшується, тому я ризикую видалити об'єкт, коли він виходить за межі області …

4
Передача shared_ptr <Derived> як shared_ptr <Base>
Який найкращий метод використовувати передачу shared_ptrпохідного типу функції, яка приймає shared_ptra базового типу? Я зазвичай передаю shared_ptrs за посиланням, щоб уникнути непотрібної копії: int foo(const shared_ptr&lt;bar&gt;&amp; ptr); але це не працює, якщо я намагаюся зробити щось подібне int foo(const shared_ptr&lt;Base&gt;&amp; ptr); ... shared_ptr&lt;Derived&gt; bar = make_shared&lt;Derived&gt;(); foo(bar); Я міг би …


3
shared_ptr magic :)
Ми з паном Лідстремом посварились :) Твердження пана Лідстрема полягає в тому, що конструкція shared_ptr&lt;Base&gt; p(new Derived);не вимагає від Base наявності віртуального деструктора: Армен Цирунян : "Дійсно? Чи правильно буде очищати shared_ptr ? Чи не могли б ви, у цьому випадку, продемонструвати, як цей ефект можна реалізувати?" Даніель Лідстрем : …

5
Чи існує неатомний еквівалент std :: shared_ptr? І чому в <memory> його немає?
Це дещо із двох частин питання про атомність std::shared_ptr: 1. Наскільки я можу зрозуміти, std::shared_ptrце єдиний розумний вказівник, &lt;memory&gt;який є атомним. Мені цікаво, чи є доступна неатомна версія std::shared_ptr(я не бачу нічого &lt;memory&gt;, тому я також відкритий для пропозицій за межами стандарту, таких як Boost). Я знаю, що boost::shared_ptrце також …

4
Чи застаріло auto_ptr?
Чи буде застарілим auto_ptr у вхідному стандарті C ++? Чи слід для передачі права власності використовувати замість shared_ptr унікальний_ptr? Якщо unique_ptr відсутній у стандарті, то чи потрібно мені замість цього використовувати shared_ptr?

7
Приклад використання shared_ptr?
Привіт, сьогодні я задав питання про те, як вставити різні типи об’єктів в один і той же векторний масив, і мій код у цьому питанні був gate* G[1000]; G[0] = new ANDgate() ; G[1] = new ORgate; //gate is a class inherited by ANDgate and ORgate classes class gate { …

10
Коли використовувати shared_ptr і коли використовувати необроблені вказівники?
class B; class A { public: A () : m_b(new B()) { } shared_ptr&lt;B&gt; GimmeB () { return m_b; } private: shared_ptr&lt;B&gt; m_b; }; Скажімо, B - це клас, який семантично не повинен існувати поза життям A, тобто немає абсолютно жодного сенсу для B існувати сам по собі. Потрібно GimmeBповернути …

12
RAII проти збирача сміття
Нещодавно я дивився чудову розмову Herb Sutter про "Leak Free C ++ ..." на CppCon 2016, де він розповів про використання розумних покажчиків для реалізації RAII (залучення ресурсів є ініціалізацією) - Концепції та те, як вони вирішують більшість проблем з витоками пам'яті. Тепер мені було цікаво. Якщо я суворо дотримуюсь …

2
Скидання слабкого_птр впливає на спільний_птр?
Я не дуже звик користуватися weak_ptrі зіткнувся з досить заплутаною ситуацією. Я використовую Intel XE 2019 Composer update 5 ( пакет 2019.5.281 ) у поєднанні з Visual Studio 2019 ver. 16.2.5 . Я компілюю в 64-розрядні. Я використовую стандартний C ++ 17 . Ось код мого рішення з шипом: #include …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.