释放由std :: make_tuple()

时间:2018-05-07 04:40:24

标签: c++ stl

我假设std :: make_tuple()创建的元组对象是在堆栈上动态分配的。我的问题是如何在生命周期达到最终状态时释放/删除此对象。

std::tuple<int,int> myTuple = std::make_tuple(3, 7);
delete myTuple; // is this correct?

2 个答案:

答案 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.