Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- // Фабрика создает объект и передает его в уникальное владение вызывающей стороне
- unique_ptr<Animal> CreateAnimal(const string& name)
- {
- if(name == "Tiger")
- {
- return make_unique<Tiger>();
- }
- if(name == "Wolf")
- {
- return make_unique<Wolf>();
- }
- if(name == "Fox")
- {
- return make_unique<Fox>();
- }
- return nullptr;
- }
- class Shape
- {
- shape_ptr<Texture> texture_;
- public:
- //Новая фигура будет учавствовать в совместном владении текстурой, переданной в конструктор
- Shape(shared_ptr<Texture> texture):texture_(move(Texture)){}
- };
- //Переданный указатель не участвует во владении объектом выражения
- void Print(const Expression*e)
- {
- if(!e)
- {
- cout<<"Null expression provided"<<endl;
- return;
- }
- cout<<e->ToString()<< " = " <<e->Evaluate()<<endl;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- int main()
- {
- A* ptr = new A;
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////
- void UseA(int x)
- {
- A* ptr = new A;
- if(x<0)
- {
- return;
- }
- delete ptr;
- }
- int main()
- {
- UseA(-1);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- int main()
- {
- A* ptr = new A;
- unique_ptr<A> up1(ptr);
- unique_ptr<A> up2(ptr);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- int main()
- {
- A* ptr = new A;
- shared_ptr<A> up1(ptr);
- shared_ptr<A> up2(ptr);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- A* MAkeA()
- {
- return new A;
- }
- int main()
- {
- unique_ptr<A> up(MakeA());
- shared_ptr<A> sp(MakeA());
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- unique_ptr<A> MAkeA()
- {
- return make_unique<A>();
- }
- int main()
- {
- unique_ptr<A> up =MakeA();
- shared_ptr<A> sp= MakeA();
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- struct A{/*...*/};
- int main()
- {
- auto up1 = make_unique<A>();
- unique_ptr<A> up2(up1.get());
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- class Cache
- {
- public:
- shared_ptr<Widget> GetWidget(const string&name)
- {
- if(!map_[name])
- {
- map_[name] = make_shared<Widget>(name);
- }
- return map_[name];
- }
- private:
- map<string,shared_ptr<Widget>> map_;
- };
- ///
- class Cache
- {
- public:
- shared_ptr<Widget> GetWidget(const string&name)
- {
- auto ret = map_[name].lock();
- if(!ret)
- {
- ret = make_shared<Widget>(name);
- map_[name] = ret;
- }
- return ret;
- }
- private:
- map<string,weak_ptr<Widget>> map_;
- };
- ///////////////////////////////////////////
- Widget * GetNonOwningPtr();
- shared_ptr<Widget> GetOwningPtr();
- shared_ptr<Widget> GetWidget(bool owning)
- {
- if(owning)
- {
- return GetOwningPtr();
- }
- else
- {
- Widget * ptr = GetNonOwningPtr();
- auto dummyDeleter = [](Widget*){};
- return shared_ptr<Widget>(ptr,dummyDeleter);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement