Почему make_shared выделяет один и тот же адрес в отдельных вызовах? - PullRequest
2 голосов
/ 30 октября 2019

Почему этот make_shared выделяет один и тот же адрес памяти в двух отдельных вызовах?

typedef struct {
    int a;
    int b;
    int c;
} test_t;

void call_func()
{
    std::shared_ptr<test_t> tst = std::make_shared<test_t>();

    std::cout << "addr: " << tst << std::endl;
}

int main()
{
    call_func();
    call_func();
}

Здесь он находится в сети: http://coliru.stacked -crooked.com / a / ffc92bc131009402

1 Ответ

12 голосов
/ 30 октября 2019

Поскольку это возможно.

call_func() создает новый объект test_t в доступной памяти и помещает его в std::shared_ptr. Объект test_t уничтожается, когда std::shared_ptr выходит из области видимости при выходе из call_func().

Таким образом, когда выходит первый вызов call_func(), используемая им память освобождается идоступен для повторного использования при втором вызове call_func().

Это нормальное поведение, не о чем беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...