在 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;
然而,您需要定义一个构造函数来初始化 x
和 y
,因为您没有为成员变量提供默认值。
根据该语句所在的上下文,p
将分配在堆上或堆栈上。如果您在主函数中实例化 p
,它将是后者。
您可以创建指向 Point
对象的指针,方法是:
Point* p = nullptr;
但是,您只会创建一个指针。您将需要进一步处理分配问题,您可以这样做:
Point* p = new Point{1, 2};
在这种情况下,您还应该在程序结束之前释放分配的内存,如下所示:
delete p;
我在将程序从 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;
然而,您需要定义一个构造函数来初始化 x
和 y
,因为您没有为成员变量提供默认值。
根据该语句所在的上下文,p
将分配在堆上或堆栈上。如果您在主函数中实例化 p
,它将是后者。
您可以创建指向 Point
对象的指针,方法是:
Point* p = nullptr;
但是,您只会创建一个指针。您将需要进一步处理分配问题,您可以这样做:
Point* p = new Point{1, 2};
在这种情况下,您还应该在程序结束之前释放分配的内存,如下所示:
delete p;