Хранитель (Holder)
Пример
# include <iostream>
using namespace std;
template <typename Type>
class Holder
{
private:
Type* ptr{ nullptr };
public:
Holder() = default;
explicit Holder(Type* p) : ptr(p) {}
Holder(Holder&& other) noexcept
{
ptr = other.ptr;
other.ptr = nullptr;
}
~Holder() { delete ptr; }
Type* operator ->() noexcept { return ptr; }
Type& operator *() noexcept { return *ptr; }
operator bool() noexcept { return ptr != nullptr; }
Type* release() noexcept
{
Type* work = ptr;
ptr = nullptr;
return work;
}
Holder(const Holder&) = delete;
Holder& operator =(const Holder&) = delete;
};
class A
{
public:
A() { cout << "Constructor" << endl; }
~A() { cout << "Destructor" << endl; }
void f() { cout << "Function f of class A is called" << endl; }
};
int main()
{
Holder<A> obj(new A{});
obj->f();
}
Last updated