首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有新关键字并使用指针的C++对象初始化

没有新关键字并使用指针的C++对象初始化
EN

Stack Overflow用户
提问于 2015-01-05 06:35:49
回答 3查看 198关注 0票数 2

根据我在c++中的知识,当使用指针初始化对象时,我们必须使用新关键字。但在下面的示例中,指针并不指向使用“new”初始化的对象,但我们仍然可以调用不修改成员变量的方法。

代码语言:javascript
复制
#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;
}

在上面的代码中,我很困惑为什么我可以在主方法中调用Q行中的方法。此外,当我尝试访问一个成员变量时,我会得到一个错误。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-05 06:44:30

您正在调用未定义的行为。在这种情况下,大多数编译器都不会尝试访问" this“中的任何内容,这样您就可以摆脱它了。但这一标准并不能保证这将奏效。密码坏了。

这里还有更多的讨论;他们谈论空指针,但就我们的目的而言,垃圾指针几乎是一样的。When does invoking a member function on a null instance result in undefined behavior?

票数 2
EN

Stack Overflow用户

发布于 2015-01-05 06:40:21

它之所以起作用是因为,在封面下面,B::display()被实现为display(B* this),而您没有使用this进行任何操作。

如果您尝试使用this->访问任何成员变量,您将看到真正的问题。

票数 1
EN

Stack Overflow用户

发布于 2015-01-05 06:41:42

这是你的好运,你能够调用非静态函数,而不使对象不受影响。在本例中,指针b指向一些垃圾,幸运的是得到了所需的结果。您将无法访问或修改数据成员(即使它们是公共的),因为没有为它们分配内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27774516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档