给定一个普通的旧数据结构
struct Point
{
int x;
int y;
};我能做到
Point * p1 = new Point; // members x, y uninitialised
Point * p2 = new Point(); // member x, y are 0现在假设我有
class PointAdv
{
std::string sPrefix;
int x;
int y;
std::string sPostfix;
};我就是这么做的
Point * p1Adv = new PointAdv;
Point * p2Adv = new PointAdv();我可以保证第二个表达式中的类,在任何ISO C++标准下x和y都是0吗?谢谢
对新的array new的PODs和类也做类似的保证。
其他StackOverflow问题与此类似,但它们不清楚当类是类类型和内置类型的混合时会发生什么。我想知道在使用new type()时,尽管存在类类型的成员,内建类型是否被初始化为零;
发布于 2021-07-03 03:26:46
是的,它们将是零初始化的。
POD-ness不会影响这一点。这是因为您的类有一个隐式生成的默认构造函数(在类体中显式=defaulted的构造函数也可以做到这一点)。
此效果通过满足此条件的类递归传播(因此,如果您有任何具有满足此要求的默认构造函数的类类型的成员,则它们也将被置零),并通过数组传播。
详情请参见cppreference。
https://stackoverflow.com/questions/68230356
复制相似问题