我有这个类 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指针,这显然不起作用。我该如何解决这个问题?
答案 0 :(得分:1)
您需要传递指向函数的指针或指针引用,并使用new
进行分配:
static bool parse(const std::string& input, MyClass *& result)
{
// ......
result = new MyClass(paramA, paramB)
return true;
}