没有 new 关键字和使用指针的 C++ 对象初始化

标签 c++ pointers

<分区>

根据我对 c++ 的了解,在使用指针初始化对象时,我们必须使用 new 关键字。但是在下面的例子中,指针并没有指向一个用'new'初始化的对象,但是我们仍然可以调用不修改成员变量的方法。

#include <iostream>
using namespace std;
class B
{
    public:

       void display()
         { cout<<"Content of base class.\n"; }

};


int main()
{
    B *b; // line p : not initialized with 'new' 

    b->display(); //line q: this prints Content of base class

    return 0;
}

在上面的代码中,我很困惑为什么我可以在 main 方法中调用第 q 行的方法。还有为什么当我尝试访问成员变量时出现错误。 提前致谢。

最佳答案

您正在调用未定义的行为。在这种情况下,大多数编译器将永远不会尝试访问“this”中的任何内容,而您会侥幸逃脱。但该标准并不保证这会起作用。密码坏了。

这里讨论比较多;他们谈论空指针,但对于我们的目的来说,垃圾指针几乎是一样的。 When does invoking a member function on a null instance result in undefined behavior?

关于没有 new 关键字和使用指针的 C++ 对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27774516/

相关文章:

c++ - 在帧缓冲区内渲染多采样和单采样纹理

c++ - Flash 和 C++ 的脚本语言?

c++ - 如何找出 MSVC 为预处理器宏使用的值

c++ - 为什么使用此代码会出现 "Access violation reading location"错误?

c++ - 为 C++ 多维类指针创建初始化和删除函数

c++ - Object Mat(args); 之间的区别 - 内存分配明智 -和 Object *Mat = new Mat(args);在 C++ 中?

c - 为什么这个搜索函数返回一个指向指针的指针呢?

c - 在 C 中,指针和数组之间的算术如何工作?

使用指针在函数内调用函数 - C

检查结构中的指针是否为 NULL