没有构造函数的类强制使用指针类型

class with no constructor forces the use of a pointer type?

本文关键字:指针 类型 构造函数      更新时间:2023-10-16

我不想使用指针,当我不需要的时候,但这里有问题:在下面的代码中,如果我删除星号,使level简单地成为object,当然删除level = new Level;行,我得到一个运行时错误,原因是level然后在第一行初始化,在initD3Dinit_pipeline之前-设置投影和视图的方法。你看到的问题是,level使用这两件事,但当首先完成我得到一个null指针异常。

这是一个简单的情况下,答案是使用指针?我以前遇到过这个问题,当一个类类型不接受参数时,你实际上是在声明它的地方初始化它....,这看起来非常令人烦恼还是我对最后一部分的理解错了?

Level* level;
D3DMATRIX* matProjection,* matView;
//called once
void Initialise(HWND hWnd)
{
initD3D(hWnd);
    init_pipeline();
level = new Level;
}

我来自c#,在c#中,你只是用Level level行声明一个名字;无论是否为参数,您仍然需要在某个时候初始化它

你是正确的,如果你这样做:

Level level;

level将在该点实例化。这是因为上面的表达式看起来是一个全局变量,它不仅是一个声明,而且还是一个定义

如果因为Level在其他东西被实例化之前被实例化而导致您出现问题,那么您就遇到了全局变量糟糕的典型原因。

您已经尝试通过使level成为指针然后稍后"初始化"它来解决这个问题。可能会让您感到惊讶的是,level仍然在同一点被实例化。现在的区别是level类型。它不再是Level了;现在它是一个指向level的指针。如果您在代码输入Initialize时检查level的值,您将看到它的值为NULL。

它的值是NULL而不是垃圾值,因为全局变量是静态初始化的,在这里,这意味着零初始化。

但是这些都有点偏离了真正的问题,即您首先使用的是全局变量。如果您需要按特定顺序实例化对象,那么就按该顺序实例化它们。不要使用全局变量,你可能会发现这样做,你也不需要使用指针。

在这种情况下,答案是使用指针

吗?

是的。

相关文章: