结构 + initializer_list 的聚合初始化:新与静态
Aggregate initialization for structs + initializer_list: new vs static
最近我调试了一些复杂结构的分配对象(未定义构造函数)的结果出现了奇怪的问题。结果,我检测到如果我有,例如:
struct A {
int b;
std::initializer_list<Type*> c;
};
那么使用new
和静态分配的这个struct A
的对象 a 是不同的:
A a {1, {new Type(), new Type()}};
做我想做的,但是
A* a = new A {1, {new Type(), new Type()}};
对c
成员执行一些错误初始化。
这些情况是否因标准、编译器的不良行为或我的错误而有所不同C++?在VS2017上测试。
如果你阅读文档,你可以避免这样的问题:https://en.cppreference.com/w/cpp/utility/initializer_list。
在原始初始值设定项列表对象的生存期结束后,不保证基础数组存在。std::initializer_list 的存储未指定(即它可以是自动、临时或静态只读内存,具体取决于情况)。
因此,正如评论中的链接中所建议的那样,您应该将数据存储在永久容器中(此处std::vector
可能是正确的选择)。
相关文章:
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- "local scope"中的 C++ 初始化静态变量
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何从静态类函数初始化静态类对象
- C++:用IIFE线程初始化静态局部变量安全吗
- 如何在 c++ 中初始化静态类对象?
- 使用 lambda 初始化静态数组
- 使用 lambda 函数初始化静态数据成员
- 如何从 std::integer_sequence 初始化静态数组?
- 在构造函数中初始化静态函数指针
- C - 初始化静态成员的方法
- 大括号使用枚举类初始化静态常量unordered_map
- C++ main 函数中初始化静态变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何在运行时使用静态成员函数初始化静态成员变量
- 与其他静态const成员初始化静态常量成员