Выделение памяти через шаблон


#include <iostream>

template<class T>
class Auto_ptr1
{
    T* m_ptr;
public:

    Auto_ptr1(T* ptr = nullptr)
        :m_ptr(ptr)
    {
    }


    ~Auto_ptr1()
    {
        delete m_ptr;
    }

    T& operator*() const { return *m_ptr; }
    T* operator->() const { return m_ptr; }
};

class Item
{
public:
    Item() { std::cout << "Item acquired\n"; }
    ~Item() { std::cout << "Item destroyed\n"; }
};

int main()
{
    
    Auto_ptr1<Item> item(new Item);
    return 0;
} 

Интересно понять как происходит выделение памяти в данном случае. Если выполнять программу пошагово ,то сначала выполняется конструктор класса Item , а затем Auto_ptr1.Но где это выделение происходит? Не могу понять в каком порядке происходит выделение, куда передается new Item.


Ответы (1 шт):

Автор решения: Mikhailo
Auto_ptr1<Item> item(new Item);

Сначала вызывается new Item, который выделяет память для Item, вызывает для него конструктор по умолчанию, и возвращает указатель-адрес этого нового Item.

Затем создается объект item в стеке, которому этот адрес передается в качестве параметра. Вызывается соответствующий конструктор Auto_ptr1(T* ptr = nullptr).

→ Ссылка