将对象作为 null 返回内容
Returning object as null returns what?
我有一个类和一个返回该类对象的函数,如果我返回 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
}
在C++中,没有实际的空值(但是自新版本以来有nullptr
)。这意味着 NULL 的定义如下:
#define NULL 0
因此它具有与数字变量 0 相同的品质。这就是您不能将类设置为 0 的原因。
编译器
不接受此代码。 C++
与Java
不同,C#
不将类实例视为指针(或引用)。因此,对于此返回,它将尝试使用代码someclass(NULL)
创建新的someclass
实例。由于您没有合适的构造函数,因此将发生错误。
提供一些"不存在"的值,请在类中对其进行编程(例如,作为布尔标志)或使用指针,例如:
someclass* functionname() {
if( ??? ) {
return new someclass(2,3);
}
else {
return NULL;
}
}
请记住,C++
没有抓取收集器,因此您需要在不需要时自行删除new
ed 对象。
someclass *a;
a = functionname();
...
delete a;
忘记这是C++
中最烦人的错误。
该示例更像是情境描述,而不是应该实际编译的内容,因此我没有费心验证它,因为它与答案无关,我怀疑有人会有兴趣筛选我定义的 100 行类和函数。
无论如何,答案是,如果类有任何接受 1 个变量(可选或其他)的构造函数,它将使用该构造函数并在它可以放入的第一个变量中用 0 初始化对象
相关文章:
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- fopen 在 gdb 中返回 NULL
- 为什么要从main()返回NULL?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 如何在C++中返回Null作为引用
- 从模板化函数返回Null对象
- GDALOpen 在 GEOTiff 文件上返回 null
- PyThreadState_GET() 从 PyImport_GetModuleDict() 中返回 NULL
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 如何为迭代器返回"null"值?
- 具有 4 个指针的节点的递归插入函数返回 null
- winAPI FindResource 仅在 DLL 中返回 NULL
- 使用 dlopen/dlsym 打开C++共享库 - dlsym 返回 NULL
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 尚未归shared_ptr所有的实例的 shared_from_this() 总是返回 null?