我班级的对象变得等于nullptr
并且失败了。我似乎无法弄清楚为什么。
我试图将一个字符串作为参数传递给一个类的构造函数,该构造函数已由另一个团队定义 - 在此示例中为Hello
。 Hello
类定义了一个构造函数,它将引用字符串作为参数。
我正在尝试在类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
类已由另一个团队定义。我不能修改它。我可以对main
和Abc
类进行任何更改。
答案 0 :(得分:1)
您应该将h1定义为成员变量。现在,你在函数体(即构造函数)中创建它,因此它的作用域就是这个函数。函数返回后,您的对象将被销毁。