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

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

1488
Когда использовать виртуальные деструкторы?

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

277
Разница в 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. Может кто-нибудь...

270
Должны ли мы передавать shared_ptr по ссылке или по значению?

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

187
Как мне вызвать :: 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 &)...

172
shared_ptr для массива: его следует использовать?

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

159
Использование умных указателей для учеников

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

148
Зачем мне std :: переместить std :: shared_ptr?

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

129
Почему std :: shared_ptr <void> работает

Я нашел код с использованием std :: shared_ptr для произвольной очистки при завершении работы. Сначала я подумал, что этот код не может работать, но потом попробовал следующее: #include <memory> #include <iostream> #include <vector> class test { public: test() { std::cout <<...

116
Разница между `const shared_ptr <T>` и `shared_ptr <const T>`?

Я пишу метод доступа для общего указателя на C ++, который выглядит примерно так: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr<Bar> m_bar; } Таким образом, для поддержки константности getBar()возвращаемого типа должен быть объект...

115
C ++ - передача ссылок на std :: shared_ptr или boost :: shared_ptr

Если у меня есть функция, которая должна работать с a shared_ptr, не было бы более эффективным передать ей ссылку на нее (чтобы избежать копирования shared_ptrобъекта)? Каковы возможные побочные эффекты? Я предвижу два возможных случая: 1) внутри функции делается копия аргумента, как в...

106
std :: shared_ptr безопасность потока объяснил

Я читаю http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html, и мне все еще не понятны некоторые проблемы с безопасностью потоков: Стандарт гарантирует, что подсчет ссылок является потокобезопасным и независимым от платформы, верно? Аналогичная проблема - стандартные гарантии, что только...

103
Где shared_ptr?

Я так расстроен прямо сейчас, после нескольких часов попыток найти, где находится shared_ptr. Ни в одном из примеров, которые я вижу, не показан полный код, включающий заголовки shared_ptr(и работающий). Просто констатировать std, tr1а <memory>совсем не помогает! Я скачал бусты и все такое,...

101
std :: shared_ptr этого

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

93
Передача shared_ptr <Derived> как shared_ptr <Base>

Каков наилучший способ передать a shared_ptrпроизводного типа функции, которая принимает shared_ptra базового типа? Я обычно передаю shared_ptrs по ссылке, чтобы избежать ненужной копии: int foo(const shared_ptr<bar>& ptr); но это не сработает, если я попытаюсь сделать что-то вроде int...

82
Пример использования 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 { ..... ...... virtual void Run() {...

22
Хранитель shared_ptr хранится в памяти, выделенной пользовательским распределителем?

Скажем, у меня есть shared_ptrпользовательский распределитель и пользовательский удалитель. Я не могу найти в стандарте ничего, что говорит о том, где должен храниться удалитель: он не говорит, что пользовательский распределитель будет использоваться для памяти удалителя, и не говорит, что этого не...