Вопросы с тегом «shared-ptr»

Класс умного указателя с подсчетом ссылок, реализующий совместное владение

17
Когда использовать виртуальные деструкторы?
У меня есть четкое понимание большинства ОО-теорий, но меня смущает одна вещь - виртуальные деструкторы. Я думал, что деструктора всегда называют независимо от того, что и для каждого объекта в цепочке. Когда вы собираетесь сделать их виртуальными и почему?

8
Разница в make_shared и обычном shared_ptr в C ++
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); Здесь есть много постов о Google и StackOverflow, но я не могу понять, почему make_sharedэто более эффективно, чем прямое использование shared_ptr. Может кто-нибудь объяснить мне пошаговую последовательность созданных объектов и операций, выполняемых обоими, чтобы я смог понять, насколько make_sharedэто эффективно. Я привел один …
277 c++  c++11  shared-ptr 

10
Должны ли мы передавать shared_ptr по ссылке или по значению?
Когда функция берет shared_ptr(из boost или C ++ 11 STL), вы передаете ее: по постоянной ссылке: void foo(const shared_ptr<T>& p) или по значению void foo(shared_ptr<T> p):? Я бы предпочел первый метод, потому что подозреваю, что он будет быстрее. Но стоит ли это того или есть дополнительные проблемы? Не могли бы …
270 c++  c++11  boost  shared-ptr 

13
Когда полезен std :: weak_ptr?
Я начал изучать умные указатели C ++ 11, и я не вижу никакого полезного использования std::weak_ptr. Может кто-нибудь сказать мне, когда std::weak_ptrэто полезно / необходимо?

16
Как мне вызвать :: std :: make_shared в классе только с защищенными или закрытыми конструкторами?
У меня есть этот код, который не работает, но я думаю, что цель ясна: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); …
187 c++  c++11  shared-ptr 

2
shared_ptr для массива: его следует использовать?
Просто небольшой вопрос по поводу shared_ptr. Это хорошая практика, чтобы использовать shared_ptrуказание на массив? Например, shared_ptr<int> sp(new int[10]); Если нет, то почему? Одна причина, о которой я уже знаю, это то, что нельзя увеличивать / уменьшать shared_ptr. Следовательно, его нельзя использовать как обычный указатель на массив.
172 c++  c++11  shared-ptr 

2
Использование умных указателей для учеников
У меня проблемы с пониманием использования умных указателей в качестве членов класса в C ++ 11. Я много читал об умных указателях и думаю, что понимаю, как unique_ptrи shared_ptr/ или weak_ptrработаю в целом. То, что я не понимаю, является реальным использованием. Кажется, что все рекомендуют использовать unique_ptrкак способ идти почти …

6
Зачем мне std :: переместить std :: shared_ptr?
Я просматривал исходный код Clang и нашел этот фрагмент: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Зачем мне std::moveэто std::shared_ptr? Есть ли смысл передавать право собственности на общий ресурс? Почему бы мне просто не сделать это вместо этого? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

6
Почему std :: shared_ptr <void> работает
Я нашел код с использованием std :: shared_ptr для произвольной очистки при завершении работы. Сначала я подумал, что этот код не может работать, но потом попробовал следующее: #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; …
129 c++  c++11  shared-ptr 

4
Разница между `const shared_ptr <T>` и `shared_ptr <const T>`?
Я пишу метод доступа для общего указателя на C ++, который выглядит примерно так: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr&lt;Bar&gt; m_bar; } Таким образом, для поддержки константности getBar()возвращаемого типа должен быть объект boost::shared_ptr, предотвращающий изменение того, на что Barон указывает. Я предполагаю , …
116 c++  boost  const  shared-ptr 

17
C ++ - передача ссылок на std :: shared_ptr или boost :: shared_ptr
Если у меня есть функция, которая должна работать с a shared_ptr, не было бы более эффективным передать ей ссылку на нее (чтобы избежать копирования shared_ptrобъекта)? Каковы возможные побочные эффекты? Я предвижу два возможных случая: 1) внутри функции делается копия аргумента, как в ClassA::take_copy_of_sp(boost::shared_ptr&lt;foo&gt; &amp;sp) { ... m_sp_member=sp; //This will copy …

3
std :: shared_ptr безопасность потока объяснил
Я читаю http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html, и мне все еще не понятны некоторые проблемы с безопасностью потоков: Стандарт гарантирует, что подсчет ссылок является потокобезопасным и независимым от платформы, верно? Аналогичная проблема - стандартные гарантии, что только один поток (содержащий последнюю ссылку) вызовет удаление для общего объекта, верно? shared_ptr не гарантирует безопасность потоков для …
106 c++  c++11  shared-ptr 


4
Где shared_ptr?
Я так расстроен прямо сейчас, после нескольких часов попыток найти, где находится shared_ptr. Ни в одном из примеров, которые я вижу, не показан полный код, включающий заголовки shared_ptr(и работающий). Просто констатировать std, tr1а &lt;memory&gt;совсем не помогает! Я скачал бусты и все такое, но он все еще не появляется! Может ли …

2
std :: shared_ptr этого
Сейчас я пытаюсь научиться использовать умные указатели. Однако при проведении некоторых экспериментов я обнаружил следующую ситуацию, для которой не смог найти удовлетворительного решения: Представьте, что у вас есть объект класса A, являющийся родительским для объекта класса B (дочерний), но оба должны знать друг друга: class A; class B; class A …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.