Что делать, если я игнорирую возвращаемое значение функции с возвращаемым типом shared_ptr - PullRequest
1 голос
/ 26 сентября 2019
#include <iostream>
#include <memory>

using namespace std;

shared_ptr<string> func()
{
    shared_ptr<string> ptr = make_shared<string>("smart poiter");
    return ptr;
}

int main(int argc, char const *argv[])
{
    func();
    cout << "pause" << endl;
    return 0;
}

Как и в коде выше, будет ли освобождена память строки "smart poiter"?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2019

Да.Внутренний счетчик достигнет 0, и память будет безопасно освобождена.

2 голосов
/ 26 сентября 2019

Да.shared_ptr здесь не особенные; любой деструктор экземпляра будет вызван незамедлительно (когда оператор завершит оценку), если экземпляр возвращается без назначения;невыполнение этого требования сломало бы RAII критическим способом.Деструктор shared_ptr уменьшает счетчик ссылок, никакие другие экземпляры не имеют ссылки, поэтому деструктор освобождает связанную память.

...