对象矢量的初始化
Initialization of vector of objects
在我提出问题之前,让我提前提到,我知道这个话题已经讨论了很多,但通过查看大多数答案,我再次未能找到实现我想要的东西的正确方法(很可能是因为我错过了给出的答案)。所以,假设我想创建20倍的对象向量(比如每个向量的大小为10),它应该是全局范围的(从某种意义上说,这是在类内完成的,我希望这些对象向量在类外传递)。因此,我真的不确定以下内容是否有效:
for ( int i =0; i<20; i++)
vector<A> * vec_of_class = new vector<A>(10);
/*where A is the class and I use new to have them in the heap,
so that they won't be local */
现在,我知道这意味着我应该格外小心地处理它们并确保我准备删除它们,但我不确定我正在做的操作是否有效。一般来说,我想实现初始化对象A的20个不同向量,这些向量可以在全局范围内使用(操作发生在其他类的函数中),我知道它可以使用对象a的向量的向量,但我想知道如何正确地进行这种操作(在其他类的体函数中初始化对象a的20个不同向量,并全局使用它们)。我希望,我的问题不会让人困惑,你可以在这里给我一些帮助。
动态分配任何标准容器(包括vector)时都不应该出现这种情况。所以std::vector<> = new <>
总是错的。
要初始化矢量,可以使用多种技术。我发现初始值设定项列表特别方便,比如这里:
std::vector<int> vec{10, 20, 30, 40, 50};
所以,假设我想创建20倍的物体矢量(比如每个物体的大小为10)
这很容易。用途:
std::vector<std::vector<A>> my_data{20, std::vector<A>{10}};
这应该是全局范围的(从某种意义上说,这是在类内完成的,我希望这些对象向量在类外传递)。
我不清楚你想在这里完成什么。
当某些事情在类内完成时,可以在static
成员函数或常规成员函数中完成。似乎您应该使用static
成员函数,但我不确定。
如果您使用static
成员函数,我建议:
std::vector<std::vector<A>> const& TheClass::get_my_data()
{
static std::vector<std::vector<A>> my_data{20, std::vector<A>{10}};
static bool inited = false;
if ( !inited )
{
// Set the values of the elements in my_data
// ...
inited = true;
}
return my_data;
}
如果使用常规成员函数,我建议在构造函数中填充my_data
并从函数返回。
// Need to make my_data a member variable
TheClass::TheClass() : my_data{20, std::vector<A>{10}}
{
// Set the values of the elements in my_data
// ...
}
std::vector<std::vector<A>> const& TheClass::get_my_data() const
{
return my_data;
}
如果在函数中声明一个变量,那么该变量的作用域就是函数。外面无法进入。
您可以做的是在全局范围内声明20个指针,并在任何需要的地方(例如,在函数内部)初始化它们。
- C++使用整数的压缩数组初始化对象
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 在 c++ 中初始化对象
- C++ 手动分配和初始化对象
- 使用运算符"="在C++中用值初始化对象
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- 如何初始化对象数组?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何在线程中初始化对象,然后在其他地方使用它?
- 在没有默认构造函数时使用垃圾数据初始化对象
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 在 c++ 中复制对未初始化对象的引用
- 在成员变量在另一个文件中发生更改后,调用与初始化对象分开的函数
- 在不放置新运算符的情况下,在预分配的内存上使用虚函数初始化对象 - 这可能吗?如果没有,为什么
- 复制 CTOR 与赋值运算符以初始化对象(性能)
- 当您通过分配初始化C 对象时会发生什么
- 获取未初始化对象成员的地址是否定义良好?