工厂方法中的输出参数

时间:2014-03-10 14:07:28

标签: c++ pointers factory-pattern

我有这个类 MyClass ,通常是通过解析字符串来创建的。我不能相信这个字符串总是正确的,因此我不想把解析放在构造函数中。因此,我创建了一个静态解析函数,如果字符串有效则返回true,如果无效则返回false。见下文:

class MyClass
{
private:
    Type1 m_memberA;
    Type2 m_memberB;

public:        
    MyClass(const Type1& parameterA, const Type2& parameterB)
         : m_memberA(parameterA), m_memberB(paramterB)

    static bool parse(const std::string& input, MyClass * result)
    {
        Type1 paramA;
        Type2 paramB;

        //Parse input and get values for paramA and paramB.
        //Return false if the input is invalid.

        MyClass temp(paramA, paramB)
        *result = temp;
        return true;
    }
}

我的意图是按如下方式使用它:

void myFunction(const std::string& input)
{
     MyClass * myObject = NULL;
     if(MyClass::parse(input, myObject))
     {
          //Use myObject for something
     }
     else
     {
          //Log invalid input string
     }
}

现在,这在运行时崩溃了。我想这是因为我试图取消引用一个NULL指针,这显然不起作用。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要传递指向函数的指针或指针引用,并使用new进行分配:

static bool parse(const std::string& input, MyClass *& result)
    {
        // ......

        result = new MyClass(paramA, paramB)
        return true;
    }