我正在开发一个自定义异常,我需要一个 QString 成员。就像是:
class MyException
{
private:
const QString fDescription;
public:
MyException(QString desc);
};
MyException::MyException(QString desc) : fDescription(desc)
{}
当我尝试使用它时:
if (isErrorEncountered)
{
MyException e(QString("Descriptive message here..."));
throw e;
}
我得到一个分段错误。症状与此处描述的相似: Qt QString cloning Segmentation Fault
SIGSEGV 源自QBasicAtomicInt::ref
,来自QString::QString(const QString &other)
。
在我看来,好像有人试图在复制构造函数中复制无效的 QString。我的理解是,只要有对它的有效引用,QString 就会保留一个指向其内容的指针。如果正在制作 MyException 实例的副本,那么临时堆栈实例是否没有离开范围并且副本应该成功?
当我在MyException
没有 QString 成员的情况下实现时,一切正常。