这是我为了赶上模板而制作的模板类
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函数返回v
和pop_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();
是的,我想用本地智能指针做这件事,这样我就可以“确定”对象的破坏。 现在我的程序编译但运行无穷无尽。
答案 0 :(得分:2)
不需要堆分配,只需使用一个好的旧本地变量:
T getter()
{
T temp = std::move(v.back());
v.pop_back();
return temp;
}