Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 释放std::make_tuple()创建的元组_C++_Stl - Fatal编程技术网

C++ 释放std::make_tuple()创建的元组

C++ 释放std::make_tuple()创建的元组,c++,stl,C++,Stl,我假设std::make_tuple()创建的tuple对象是在堆栈上动态分配的。我的问题是,当对象的生命周期达到结束状态时,如何释放/删除该对象 std::tuple<int,int> myTuple = std::make_tuple(3, 7); delete myTuple; // is this correct? std::tuple myTuple=std::make_tuple(3,7); 删除myTuple;//这是正确的吗? 我假设std::make_tuple

我假设std::make_tuple()创建的tuple对象是在堆栈上动态分配的。我的问题是,当对象的生命周期达到结束状态时,如何释放/删除该对象

std::tuple<int,int> myTuple = std::make_tuple(3, 7);
delete myTuple; // is this correct?
std::tuple myTuple=std::make_tuple(3,7);
删除myTuple;//这是正确的吗?
我假设std::make_tuple()创建的tuple对象是在堆栈上动态分配的

堆栈中没有动态分配的东西

发生的情况是,您在堆栈中获得一个对象(tuple类的实例),该对象可以具有指向(堆上)动态分配内存的指针

当该对象的生命周期达到结束状态时,如何释放/删除该对象

每个类都有或应该有一个析构函数,当它超出范围时(通常是命令块的末尾,请考虑大括号),该析构函数将释放所有这些动态内存。您不需要手动释放它,就像您不释放
std::string
一样

仅对手动分配给
new
的内容使用
delete
关键字

我假设std::make_tuple()创建的tuple对象是在堆栈上动态分配的

堆栈中没有动态分配的东西

发生的情况是,您在堆栈中获得一个对象(tuple类的实例),该对象可以具有指向(堆上)动态分配内存的指针

当该对象的生命周期达到结束状态时,如何释放/删除该对象

每个类都有或应该有一个析构函数,当它超出范围时(通常是命令块的末尾,请考虑大括号),该析构函数将释放所有这些动态内存。您不需要手动释放它,就像您不释放
std::string
一样


仅将
delete
关键字用于手动分配给
new
的内容,因为您没有显式调用
new
,因此无法显式调用
delete
。您可以限制
myTuple
的范围,这将触发其析构函数,释放内存

{
   std::tuple<int,int> myTuple = std::make_tuple(3, 7);
   ...
}
// myTuple goes out of scope.
{
std::tuple myTuple=std::make_tuple(3,7);
...
}
//myTuple超出范围。

您无法显式调用
delete
,因为您没有显式调用
new
。您可以限制
myTuple
的范围,这将触发其析构函数,释放内存

{
   std::tuple<int,int> myTuple = std::make_tuple(3, 7);
   ...
}
// myTuple goes out of scope.
{
std::tuple myTuple=std::make_tuple(3,7);
...
}
//myTuple超出范围。

delete
只能与
new
一起使用。您不能调用
newstd::tuple(3,7)
,因此您不能调用
delete
。此外,这是不可能的-尝试编译您的代码。
delete
只能与
new
一起使用。您不能调用
newstd::tuple(3,7)
,因此您不能调用
delete
。此外,这是不可能的-尝试编译您的代码。