我假设std :: make_tuple()创建的元组对象是在堆栈上动态分配的。我的问题是如何在生命周期达到最终状态时释放/删除此对象。
std::tuple<int,int> myTuple = std::make_tuple(3, 7);
delete myTuple; // is this correct?
答案 0 :(得分:2)
我假设std :: make_tuple()创建的元组对象是在堆栈上动态分配的。
在堆栈中没有动态分配。
你会在堆栈中得到一个对象(元组类的实例),它可以指向动态分配的内存(在堆上)。
当该对象的生命周期达到最终状态时,如何释放/删除该对象?
每个类都有或者应该有,这个析构函数在超出范围时释放所有这些动态内存(通常是命令块的末尾,想想花括号)。你不需要手动释放它,就像你没有std::string
一样免费。
仅将delete
关键字用于您使用new
手动分配的内容。
答案 1 :(得分:1)
由于您未明确调用delete
,因此无法明确调用new
。您可以限制myTuple
的范围,这将触发其析构函数,从而释放内存。
{
std::tuple<int,int> myTuple = std::make_tuple(3, 7);
...
}
// myTuple goes out of scope.