gpt4 book ai didi

c++ - C++ 中变量声明的差异

转载 作者:太空狗 更新时间:2023-10-29 23:21:58 25 4
gpt4 key购买 nike

Class A 
{
};

A aA* aA* a = new A() 之间有什么区别。

最佳答案

A a;

使用默认构造函数创建位于堆栈中的 A 实例。

A *a;

只是一个指向 A 的未初始化指针。此时它实际上并不指向 A 对象,但可以。初始化指针(在本例中,设置为 NULL)如下所示:

A *a = 0;

这里的区别是空指针不指向任何对象,而未初始化的指针可能指向任何地方。初始化你的指针是一个很好的实践,以免你发现自己想知道为什么你的程序会崩溃或产生不正确的结果。

同样,您不想尝试取消引用 NULL 指针或未初始化的指针。但是你可以测试 NULL 指针。测试未初始化的指针会产生不确定和错误的结果。它实际上可能是 != 0 但肯定不会指向您打算指向的任何地方。确保在测试它们之前初始化您的指针,并在尝试取消引用它们之前测试它们。

A a = new A();

应该写成

A *a = new A();

然后创建一个在堆上分配的新 A 对象。 A 对象是使用默认 构造函数创建的。

如果没有为类显式编写默认构造函数,编译器将隐式创建一个,但我不认为标准没有为隐式实例化的对象指定数据成员的状态。有关隐式默认构造函数的讨论,请参阅 Martin York 对此 SO question 的回复.

关于c++ - C++ 中变量声明的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com