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

std :: unique_ptr - это умный указатель, который сохраняет исключительное право собственности на объект через указатель. unique_ptr не подлежит копированию или назначению для копирования, два экземпляра unique_ptr не могут управлять одним и тем же объектом.

400
Как передать аргумент unique_ptr конструктору или функции?

Я новичок в перемещении семантики в C ++ 11, и я не очень хорошо знаю, как обрабатывать unique_ptrпараметры в конструкторах или функциях. Рассмотрим этот класс, ссылающийся на себя: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr...

367
Возвращение unique_ptr из функций

unique_ptr<T>не позволяет создавать копии, вместо этого он поддерживает семантику перемещения. Тем не менее, я могу вернуть функцию unique_ptr<T>из функции и присвоить возвращаемое значение переменной. #include <iostream> #include <memory> using namespace std;...

248
Нужно ли std :: unique_ptr <T> знать полное определение T?

У меня есть код в заголовке, который выглядит следующим образом: #include <memory> class Thing; class MyClass { std::unique_ptr< Thing > my_thing; }; Если я включаю этот заголовок в cpp, который не включает Thingопределение типа, то он не компилируется под VS2010-SP1: 1> C: \ Program...

216
make_unique и идеальная пересылка

Почему std::make_uniqueв стандартной библиотеке C ++ 11 нет шаблона функции? я нахожу std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); немного многословно Разве следующее не будет намного лучше? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Это...

203
std :: unique_ptr с неполным типом не будет компилироваться

Я использую pimpl-идиому с std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; Тем не менее, я получаю ошибку компиляции относительно использования неполного типа, в строке...

185
std :: auto_ptr в std :: unique_ptr

С появлением нового стандарта (и частей, уже доступных в некоторых компиляторах), новый тип std::unique_ptrдолжен заменить его std::auto_ptr. Их использование в точности совпадает (поэтому я могу выполнить глобальный поиск / замену в моем коде (не то, чтобы я это делал, но если бы я это сделал))...

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

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

133
Как использовать настраиваемое средство удаления с членом std :: unique_ptr?

У меня есть класс с членом unique_ptr. class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar - это сторонний класс, который имеет функцию create () и функцию destroy (). Если бы я хотел использовать std::unique_ptrс ним в отдельной функции, я мог бы сделать: void foo() {...

97
Как передать std :: unique_ptr в функцию

Как передать std::unique_ptrв функцию? Допустим, у меня есть следующий класс: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; Следующее не компилируется: void MyFunc(unique_ptr<A> arg) { cout << arg->GetVal() << endl; } int...

96
Зачем использовать std :: make_unique в C ++ 17?

Насколько я понимаю, C ++ 14 был введен, std::make_uniqueпотому что из-за того, что порядок оценки параметров не был указан, это было небезопасно: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Объяснение: если оценка сначала выделяет память для необработанного указателя,...

92
error :: make_unique не является членом std

Я пытаюсь скомпилировать следующую программу пула потоков, опубликованную в обзоре кода, чтобы проверить ее. /codereview/55100/platform-independant-thread-pool-v4 Но я получаю ошибки threadpool.hpp: In member function ‘std::future<decltype (task((forward<Args>)(args)...))>...

85
Как передать std :: unique_ptr?

У меня первая попытка использовать C ++ 11 unique_ptr; Я заменяю полиморфный необработанный указатель внутри своего проекта, который принадлежит одному классу, но передается довольно часто. Раньше у меня были такие функции, как: bool func(BaseClass* ptr, int other_arg) { bool val; // plain...

85
Почему T * может быть передано в регистр, а unique_ptr <T> не может?

Я смотрю выступление Чендлера Каррута в CppCon 2019: Нет абстракций с нулевой стоимостью в нем он приводит пример того, как он был удивлен тем, сколько накладных расходов вы понесли, используя std::unique_ptr<int>овер int*; этот сегмент начинается примерно в момент времени 17:25. Вы можете...