函数返回一个智能指针怎么释放它的内存?

#include "pch.h"
#include <iostream>
#include<string>
#include<memory>
#include<vector>
using namespace std;
using T = shared_ptr<vector<int>>;
T func(){
    T vec=make_shared<vector<int>>();
    return vec;
}
T func_1(T vec) {
    int value;
    while (cin>>value)
    {
        vec->push_back(value);
    }
    return vec;
}
void func_2(T vec) {
    for (auto elem : *vec) {
        cout << elem;
    }
}
int main() {
    func_2(func_1(func()));

}

这是我在做C++primer的一道课后题遇到的疑问,这里func()返回的智能指针计数不会为0
怎么释放它对应的内存呢?