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

Sir*_*lot -1 c++

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

这只是一个答案是使用指针的情况吗?我之前遇到过这个问题,基本上看起来非常令人烦恼的是,当一个类类型不接受任何参数时,你基本上是在你声明它的地方初始化它......或者我对这最后一部分是错误的吗?

Level* level;

D3DMATRIX* matProjection,* matView;

//called once
void Initialise(HWND hWnd)
{
initD3D(hWnd);
    init_pipeline();

level = new Level;
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ing 8

如果你这样做,你是对的:

Level level;
Run Code Online (Sandbox Code Playgroud)

然后level将被实例化,在这一点上.这是因为上面的表达式似乎是一个全局的,不仅仅是一个声明,而且还是一个定义.

如果这导致你的问题,因为Level在实例化其他东西之前被实例化,那么你遇到了全局性吮吸的经典原因.

您试图通过制作level指针然后稍后"初始化"它来解决此问题.可能会让你感到惊讶的是,level它仍然在同一点被实例化.现在的差别是类型level.它不再是Level了; 现在它是一个指针level.如果检查level代码输入的值,Initialize您将看到它的值为NULL.

它的值为NULL而不是垃圾值,因为全局变量是静态初始化的,在这种情况下,这意味着零初始化.

但这与真正的问题有些相关,即你首先使用全局变量.如果需要按特定顺序实例化对象,请按顺序实例化它们.不要使用全局变量,你可能会发现,通过这样做,你也不需要使用指针.