0

我正在尝试在 A 类构造函数中添加选项以从文件加载对象。但是我不确定加载失败时该怎么办(文件加载失败,文件格式错误..)。代码使用 A 无论 loadObjects 是否为真,这会导致分段错误。也许在构造函数中加载不是最好的方法......

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;

};
4

2 回答 2

1

只需使用throw. 在这种情况下不会创建对象,您可以在其他级别捕获异常。

于 2013-10-29T10:44:24.363 回答
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;
于 2013-10-29T11:06:20.093 回答