簡體   English   中英

內存管理:返回一個向量元素並刪除(pop_back)它

[英]Memory Management : Returning a vector element and deleting(pop_back) it

這是我為了趕上模板而制作的模板類

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM