2010-11-08 31 views
-3

++打破我创造了这个类加载网它的工作原理,但我添加了这个新功能,以帮助加快加载。当我打电话给我的程序中断/停止。
这里是我的功能C对类功能

bool CXFileEntity::LoadXFile(const std::string &filename, int startAnimation, CXFileEntity *entity, LPDIRECT3DDEVICE9 d3ddev) 
{ 
    // We only support one entity so if it already exists delete it 
    if (entity) 
    { 
     delete entity; 
     entity=0; 
    } 

    // Create the entity 
    entity=new CXFileEntity(d3ddev); 
    if (Load(filename)) 
    { 
     delete entity; 
     entity=0; 
     return false; 
    } 

    SetAnimationSet(startAnimation); 

    return true; 
} 
+0

休息/停止哪里?在这个函数中?另一个功能? – dreamlax 2010-11-09 00:04:32

+5

题外话:Load载入异常时会发生什么?你的代码中有一个'delete',这很糟糕。就像我以前说过的,你需要**停止**并获得一个初学者不是面向游戏的C++书籍,并首先学习良好的C++ *。另外,'delete 0;'完全没问题,上面的所有内容都应该用'delete entity'替换;实体= 0;'。 (尽管如此,它甚至不应该存在;它应该是沿着'entity.reset()'的行,其中'entity'是一个智能指针。) – GManNickG 2010-11-09 00:05:09

+0

您需要提供更多信息。喜欢,当程序崩溃时你会得到什么错误 – thecoshman 2010-11-09 00:07:06

回答

1

编辑:等待......我没有意识到这个功能是的CXFileEntity类成员。它看起来不像是一种静态方法。所以为了调用这个函数,你已经需要实例化一个CXFileEntity对象!因此,很可能是你绝对不希望任何删除或创建对象CXFileEntity里面这种方法的。 (如果你真的只允许一个实体同时存在,你就可以有效地删除“这个”,然后试图重新创造它,那是不行的,没办法,没怎么。)

我我希望它能够为您提供一些关于指针如何工作的线索。


你会做的更好,以提供更多的信息,例如其中如何的程序中断。

但是,这显然是错误的:

CXFileEntity *entity, 

,因为这意味着新的对象由

entity=new CXFileEntity(d3ddev); 

分配将不会被调用者可以看到。 (实体是一个局部变量,所以它的变化将不是本地范围的外部看到。)

尝试改变代码传递实体作为指向指针的指针:

CXFileEntity **entity, 

这将意味着改变函数内的代码以匹配:

if (*entity) 
{ 
    delete *entity; 
    *entity=0; 
} 

// Create the entity 
*entity=new CXFileEntity(d3ddev); 

// etc. 

您还必须更改调用者以将指针传递给指针。为了良好,请确保您第一次通过指针时,它已初始化为0:

CXFileEntity *the_entity = 0; 
...