内存管理:返回一个向量元素并删除(pop_back)它



这是我为赶上模板而制作的模板类

template <typename T>
class Myclass {
    std::vector<T> v;    
public:
Myclass(): v({0}){;}
Myclass(const Myclass& M)
{
    this->v={1,2}; //ignore this I'm gonna use int for testing 
}
~Myclass()
{
    std::cout<<"Destructor";
}
void setter(T i)
{
    v.push_back(i);
}
auto getter() -> decltype(T)
{
     return v.back();
}
};

我想让 getter 函数返回 vpop_back() 中的最后一个元素。现在我可以将back()值存储在变量中,只需pop_back().但我希望我能想出聪明的指示来做同样的事情。这是我想到的

auto getter() -> decltype(v.back())
{
    std::unique_ptr<T> p1 (new T);
    *p1=v.back();
    v.pop_back();
    return *p1;
}

我主要是

Myclass<int> m1;
m1.setter(5);
Myclass<int> m2=m1;
std::cout<<m1.getter()<<m1.getter()<<std::endl;
std::cout<<m2.getter()<<m2.getter()<<m2.getter();

是的,我想使用本地智能指针来做到这一点,以便我可以"确定"对象破坏。现在我的程序可以编译,但运行无休止。

不需要堆分配,只需使用一个好的旧局部变量:

T getter()
{
    T temp = std::move(v.back());
    v.pop_back();
    return temp;
}

最新更新