动态分配元组中的元素
Dynamically allocate elements in tuple
我有一个简单的问题,因为我没有在网上找到它。
如果我像这样通过引用传递元组中的元素是否安全,我这样放置是为了模仿我所做的。
#include <functional>
#include <iostream>
#include <map>
#include <tuple>
#include <vector>
using namespace std;
template <typename... Args>
struct S {
tuple<Args...> tup; //my tuple to hold data types but empty initially
auto& args() { return tup; } //method to access my tuple
};
// some function that modifies my tuple
void foo(auto& tup) {
std::get<0>(tup).resize(1000);
std::get<1>(tup)[76] = 654;
std::get<1>(tup)[453] = 6;
}
int main() {
S<vector<int>, map<int, int>> s; // my object
foo(s.args());
printf("vecSize = %d\n", std::get<0>(s.args()).size());
printf("mapSize = %d\n", std::get<1>(s.args()).size());
return 0;
}
前面的代码运行良好,但我不完全确定分配给这个元组及其元素的内存在实现太多动态分配时是否最终不会被破坏,假设整个内存确实如此未达到上限。
S
,它是成员元组,它的成员(vector+map)在main
的生命周期内作为s
存在方法。您将对元组的引用传递给函数 foo
,该函数安全地修改那些完全活动的成员。这都是 100% 有效和安全的。我在任何地方都没有看到任何未定义的行为、泄漏或悬空引用。
我有一个简单的问题,因为我没有在网上找到它。
如果我像这样通过引用传递元组中的元素是否安全,我这样放置是为了模仿我所做的。
#include <functional>
#include <iostream>
#include <map>
#include <tuple>
#include <vector>
using namespace std;
template <typename... Args>
struct S {
tuple<Args...> tup; //my tuple to hold data types but empty initially
auto& args() { return tup; } //method to access my tuple
};
// some function that modifies my tuple
void foo(auto& tup) {
std::get<0>(tup).resize(1000);
std::get<1>(tup)[76] = 654;
std::get<1>(tup)[453] = 6;
}
int main() {
S<vector<int>, map<int, int>> s; // my object
foo(s.args());
printf("vecSize = %d\n", std::get<0>(s.args()).size());
printf("mapSize = %d\n", std::get<1>(s.args()).size());
return 0;
}
前面的代码运行良好,但我不完全确定分配给这个元组及其元素的内存在实现太多动态分配时是否最终不会被破坏,假设整个内存确实如此未达到上限。
S
,它是成员元组,它的成员(vector+map)在main
的生命周期内作为s
存在方法。您将对元组的引用传递给函数 foo
,该函数安全地修改那些完全活动的成员。这都是 100% 有效和安全的。我在任何地方都没有看到任何未定义的行为、泄漏或悬空引用。