是否可以将对象设置为null?

Joh*_*ohn 36 c++ null object is-empty stdoptional

在我的代码中,我检查以查看对象是否为空/空.

有没有办法将对象设置为null?

Bri*_*ndy 45

类的对象不能设置为NULL; 但是,您可以将指针(包含对象的内存地址)设置为NULL.

你不能做什么的例子:

Cat c;
c = NULL;//Compiling error
Run Code Online (Sandbox Code Playgroud)

你可以做什么的例子:

Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
Run Code Online (Sandbox Code Playgroud)

  • 作为一个想要提出它的人,是的,你可以重载operator =但这不是OP想要的. (10认同)
  • 第一个可以使用`Cat :: operator =(...)`.无论如何,看起来像OP真的想检查指针.所以,+ 1. (2认同)

Bau*_*gen 9

虽然在C++中对象不能是"空/空",但在C++ 17中,我们必须std::optional表达这种意图.

使用示例:

std::optional<int> v1;      // "empty" int
std::optional<int> v2(3);   // Not empty, "contains a 3"
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查是否optional包含值

v1.has_value(); // false
Run Code Online (Sandbox Code Playgroud)

要么

if(v2) {
    // You get here if v2 is not empty
}
Run Code Online (Sandbox Code Playgroud)

int然而,普通(或任何类型)在任何有用的意义上都不能是"空"或"空"(通过你对这些词的定义).std::optional在这方面可以视为一个容器.

如果您手头没有符合C++ 17的编译器,则可以使用boost.optional.一些pre-C++ 17编译器也提供std::experimental::optional,它们的行为至少接近实际的std::optionalafaik.有关详细信息,请查看编译器手册.

  • 或`std :: experimental :: optional`(如果您的编译器提供了此功能)。 (2认同)

Jus*_*ini 5

您可以设置任何指向 的指针NULL,但NULL在 C++ 中只是简单地定义为 0:

myObject *foo = NULL;
Run Code Online (Sandbox Code Playgroud)

另请注意,NULL如果包含标准标头,则已定义,但未内置到语言本身中。如果NULL未定义,则可以使用 0 代替,或包括以下内容:

#ifndef NULL
#define NULL 0
#endif
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你真的想设置一个对象,而不是一个指针,到NULL,你可以阅读Null Object Pattern