返回对象为null返回什么?

时间:2012-12-09 23:19:46

标签: c++

我有一个类和一个返回该类对象的函数,如果我返回NULL究竟返回什么内容?

示例:

class someclass {
    int a;
    int b;
    someclass::someclass(int a, int b) {
        this->a = a; this->b = b;
    }
};

someclass functionname() {
    return NULL;
}

someclass foo = functionname();

因为我没有为该类提供返回的默认构造函数?它是一个实际可用的对象吗?或者只是胡言乱语?为什么我不能这样检查?

if (foo == NULL) {
    something
}

3 个答案:

答案 0 :(得分:0)

在C ++中,没有实际的null(但是自新版本以来有nullptr)。 这意味着NULL定义如下:

#define NULL 0

因此它具有与0,数字变量相同的品质。这就是为什么你不能把你的班级设置为0。

答案 1 :(得分:0)

编译器不接受此代码。与C++Java不同的C#不会将类实例视为指针(或引用)。因此,对于此返回,它将尝试使用代码someclass创建someclass(NULL)的新实例。由于您没有适当的构造函数,因此会发生错误。

如果你想让这个类有一些“缺席”值,可以在类中编程(例如,作为布尔标志)或使用指针,例如:

someclass* functionname() {

    if( ??? ) { 
        return new someclass(2,3);
    }
    else {
       return NULL;
    }
}

请记住C++没有垃圾收集器,因此您需要在不需要时自行删除new ed对象。

someclass *a;
a = functionname();
...
delete a;

忘记这是C++中最烦人的错误。

答案 2 :(得分:0)

这个例子更多的是一种情境描述,而不是应该实际编译的东西,因此我没有费心去验证它,因为它与答案无关,我怀疑任何人都会对筛选我定义的100行感兴趣一个类和一个函数。

无论如何,答案是如果类有任何带有1个变量的构造函数(可选地或其他),它将使用该构造函数并在其可以适合的第一个变量中用0初始化对象