类的对象变为null

时间:2015-05-21 15:54:47

标签: c++ class object c++11

我班级的对象变得等于nullptr并且失败了。我似乎无法弄清楚为什么。

我试图将一个字符串作为参数传递给一个类的构造函数,该构造函数已由另一个团队定义 - 在此示例中为HelloHello类定义了一个构造函数,它将引用字符串作为参数。

我正在尝试在类Hello中初始化类Abc的对象并调用函数print。

class Hello
{
    Hello(const string& email)
    {
        // initialises some values.
    }
    void print();
};

class Abc
{
    struct Options
    {
        string email;
    };

    Abc(const Options& options)
    {
        Hello hl(options.email);
        cout << "h1 initialised";
    }

    void callprint()
    {
        if (h1 == nullptr)
            cout << "NULL";
        else
            h1->print();
    }
};

int main()
{
    Abc::Options op; // for structure 
    op.email = "hello@world.com"
    Abc obj(op); // to initialise constructor of class Abc
    obj->callprint();
}

我目前得到的输出是:

h1 initialised
NULL

我似乎无法弄清楚为什么h1变得等于nullptr。在C ++类对象中,默认情况下永远不会变为null吗?

早些时候,我没有检查(h1==nullptr)条件,我的程序失败了。我该怎么做才能确保h1不是空对象,我可以成功调用打印函数。

重申一下,Hello类已由另一个团队定义。我不能修改它。我可以对mainAbc类进行任何更改。

1 个答案:

答案 0 :(得分:1)

您应该将h1定义为成员变量。现在,你在函数体(即构造函数)中创建它,因此它的作用域就是这个函数。函数返回后,您的对象将被销毁。