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