我正在尝试在A类构造函数中添加选项以从文件加载对象。但是我不确定加载失败时要做什么(文件加载失败,文件格式错误......)。代码使用A,无论loadObjects是否为true,都会导致分段错误。也许加载构造函数不是最好的方法......
template <typename T>
class A
{
public:
A(const std::vector<Obj<T>*>& o) : objs(o) {}
A(const std::string& file)
{
// loadObject adds new objects in objs
// objs.push_back(new Obj<T>);
if ( loadObjects(file, objs) )
{
// good, can use object A
}
else
{
// Segmentation fault when using undefined A,
// What can I do to stop execution here.
}
}
virtual ~A()
{
for (size_t i=0; i<objs.size(); ++i)
delete objs[i];
objs.clear();
}
private:
std::vector<Obj<T>*> objs;
};
答案 0 :(得分:1)
只需使用throw
即可。在这种情况下不会创建对象,您可以在另一级别捕获异常。
答案 1 :(得分:1)
创建一个函数initialize(),您可以在其中加载文件,然后在A的构造函数中调用它。此外,在使用A类对象之前,请验证此对象。因此,在这种情况下,之后的操作将不会继续。
A::A(const std::string& file)
{
if (initialize(const std::string& file) == SUCCESS)
....
else
....
}
void A::initialize(const std::string& file)
{
if ( loadObjects(file, objs) )
{
// good, can use object A
}
else
{
// Segmentation fault when using undefined A,
// What can I do to stop execution here.
}
}
然后使用A的对象。
A obj("abc.txt");
if (obj is valid)
do something;
else
return;