[英]C++ Constructor issue
我有一个用于在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)
构造函数中的对象成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.