gpt4 book ai didi

c++ - 内存管理 : Returning a vector element and deleting(pop_back) it

转载 作者:行者123 更新时间:2023-11-28 02:57:29 26 4
gpt4 key购买 nike

这是我为 catch 模板而制作的模板类

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

关于c++ - 内存管理 : Returning a vector element and deleting(pop_back) it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com