在 C++ 中将 general 类 赋值为 null

Assigning general classes as null in C++

我在将程序从 C# 转换为 C++ 时遇到了一些麻烦。给定一个 class 给它分配空值是很常见的。但是 C++ 不接受等效形式 'nullptr'

class Point{
     public:
         int x,y;
}
//...
Point p = nullptr;

有什么办法可以解决吗?

问题p 是您示例中的 non-pointer 类型。这意味着它不能用 nullptr 初始化。 p 的类型是 Point.

您可以使 p 成为指向 Point 的指针,这样您就可以使用 nullptr 对其进行初始化,如下所示:

Point *p = nullptr; //p is a pointer to non-const Point object

如果您想创建 class 类型的对象 Point 那么一种方法如下:

Point p{1, 3};

我还建议参考 good C++ book 以便更好地理解这个概念。

您不能将 nullptr 分配给 class,因为 class 是类型而不是变量。你通过输入 Point p = nullptr; 所做的是你要求编译器找到 Point 的构造函数,它接受 nullptr.

您可以创建一个 Point 的对象作为自动变量,方法是:

Point p = Point{1, 2}; // sets x = 2 and y = 3

或者像这样:

Point p;

然而,您需要定义一个构造函数来初始化 xy,因为您没有为成员变量提供默认值。

根据该语句所在的上下文,p 将分配在堆上或堆栈上。如果您在主函数中实例化 p,它将是后者。

您可以创建指向 Point 对象的指针,方法是:

Point* p = nullptr;

但是,您只会创建一个指针。您将需要进一步处理分配问题,您可以这样做:

Point* p = new Point{1, 2};

在这种情况下,您还应该在程序结束之前释放分配的内存,如下所示:

delete p;