我有一个用于在 OpenGL 中加载和渲染对象的类。为了加载对象,我有一个名为LoadFile(std::string FilePath)的函数,它工作得很好,但现在我也想从构造函数加载一个文件,所以我尝试这样做:
CObject(std::string FilePath)
{
CObject(); // set all values to 0
LoadFile(FilePath);
}
但是,每当我尝试渲染时,这样做会使我的应用程序崩溃,我真的不知道为什么:s。
我有一个用于在 OpenGL 中加载和渲染对象的类。为了加载对象,我有一个名为LoadFile(std::string FilePath)的函数,它工作得很好,但现在我也想从构造函数加载一个文件,所以我尝试这样做:
CObject(std::string FilePath)
{
CObject(); // set all values to 0
LoadFile(FilePath);
}
但是,每当我尝试渲染时,这样做会使我的应用程序崩溃,我真的不知道为什么:s。
从构造函数中调用同一个类的构造函数不会像 Java 那样工作(即将一些工作委托给更通用的构造函数)。那里的语法只是意味着您正在使用默认构造函数创建一个新的临时对象。
唯一接近的是 C++11 的委托构造函数:
CObject(std::string FilePath): CObject()
{
LoadFile(FilePath);
}
好吧,CObject();
不会将所有值都设置为 0,而是创建一个临时对象。它应该是:
CObject(std::string FilePath)
{
//manually set fields to 0
LoadFile(FilePath);
}
如果您的默认构造函数也再次调用自身,则很可能是堆栈溢出错误。
当您调用CObject()
构造函数将所有值设置为 0 时。您实际上是在创建一个临时CObject
对象,而不是将所有当前对象的值设置为 0。
您需要做的是创建一个私有初始化方法,默认构造函数和其他构造函数都可以在加载文件之前调用该方法,或者初始化CObject(std::string FilePath)
构造函数中的对象成员。