class someClass
{
public:
int* ptr2Int;
};
这是一个有效的类(是的,它可以编译)?如果在取消引用之前为 ptr2Int 分配了一个值,那么该类是否可以保证按预期工作?
class someClass
{
public:
int* ptr2Int;
};
这是一个有效的类(是的,它可以编译)?如果在取消引用之前为 ptr2Int 分配了一个值,那么该类是否可以保证按预期工作?
类中未初始化的指针与独立的未初始化指针没有任何不同。只要您不以任何危险的方式使用指针,就可以了。
请记住,尽管使用未初始化指针的“危险方式”包括仅尝试读取其值(无需取消引用)。如果您在为指针分配有效值之前使用这些隐式成员函数,则类中存在的隐式编译器提供的复制构造函数和复制赋值运算符可能会执行此类尝试。
实际上,如果我没记错的话,这个问题是标准化委员会层面的一些讨论问题。是否允许隐式生成的成员函数跳过类的未初始化成员中可能存在的陷阱表示?我不记得是什么判决了。(或者也许我在 C99 的上下文中看到了那个讨论?)
是的,没关系。指针本身存在,只是它的值是未知的,所以取消引用它是不安全的。有一个未初始化的变量很好,指针也没有什么不同
是的,这与具有单个未初始化指针的 a 完全相同struct
,并且两者都保证可以正常工作(当然,只要您在使用它之前设置指针)。
除非您取消引用指针,否则一切都很好,那么它就是未定义的领域。
一些编译器会设置指向默认值的指针(如 null),具体取决于您是在调试还是发布模式下编译。所以事情可以在一种模式下工作,突然间一切都在另一种模式下分崩离析。