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 インスタンスのコピーが作成されている場合、一時的なスタック インスタンスがスコープを離れておらず、コピーが成功するというのは本当ではないでしょうか?
QString メンバーなしで実装MyException
すると、すべてがうまく機能します。