Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- using namespace std;
- struct Actor
- {
- Actor()
- {
- cout << "I was born!" << endl;
- }
- ~Actor()
- {
- cout << "I was deleted!" << endl;
- }
- void DoWork()
- {
- cout << "I did some job!" << endl;
- }
- };
- void run(Actor* ptr)
- {
- if (ptr)
- {
- ptr->DoWork();
- }
- else
- {
- cout << "an actor was expected :-/" << endl;
- }
- }
- int main()
- {
- //1//auto ptr = new Actor;
- //1//ptr->DoWork();
- //1//run(ptr);
- //1//delete ptr;
- auto ptr = unique_ptr<Actor>(new Actor); // Созданный объект кладем в умный указатель
- //unique_ptr - это шаблонный класс, его параметр шаблона - тип указатель, который он будет хранить и (объект на который он указывает )
- //Или для создания умного указателя на новый объект можно воспользоваться функцией make_unique
- auto ptr = make_unique<Actor>();
- run(ptr.get());
- //Метод get() необходим для того чтобы из умного указателя достать обычный указатель на тот объект, на который он указывает
- //auto ptr2 = ptr; // У unique_ptr нет конструктора КОПИРОВАНИЯ
- // На один и тот же динамический объект может указывать только один unique_ptr
- // Не можем КОПИРОВАТЬ unique_ptr, но мы можем ПЕРЕМЕЩАТЬ его
- auto ptr2 = move(ptr);
- run(ptr2.get());
- run(ptr.get());// Вызываем функцию на исходном указателе после того как мы из него переместили
- //Исходный unique_ptr оказался нулевым после перемещения
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement