C++ 工厂法中的输出参数

C++ 工厂法中的输出参数,c++,pointers,factory-pattern,C++,Pointers,Factory Pattern,我有一个类MyClass,它通常是通过解析字符串创建的。我不能相信这个字符串总是正确的,因此我不想把解析放在构造函数中。因此,我创建了一个静态解析函数,如果字符串有效,则返回true;如果字符串无效,则返回false。见下文: class MyClass { private: Type1 m_memberA; Type2 m_memberB; public: MyClass(const Type1& parameterA, const Type2

我有一个类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
     }
}

现在,它在运行时崩溃。我想这是因为我试图去引用一个空指针,这显然是行不通的。如何解决此问题?

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

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

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

“我不能相信这个字符串总是正确的,因此我不想将解析放在构造函数中”-为什么不?如果解析失败,只需抛出一个异常。这部分错误
MyClass-temp(paramA,paramB)*result=temp
@MikeSeymour输入字符串是在我无法控制的远程系统中生成的。我不想抛出异常,因为它不是异常事件。