QString 멤버가 필요한 사용자 지정 예외를 개발 중입니다.Qt : 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가 QString::QString(const QString &other)
에서 오는 QBasicAtomicInt::ref
에서 유래.
복사 생성자 내에서 유효하지 않은 QString을 복사하려고 시도하는 것처럼 보입니다. QString은 유효한 참조가있는 한 그 내용에 대한 포인터를 유지한다는 것을 이해합니다. MyException 인스턴스의 복사본이 만들어지면 임시 스택 인스턴스가 범위를 벗어나 복사본이 성공해야한다는 사실이 사실입니까?
QString 멤버없이 MyException
을 구현하면 모든 것이 잘 작동합니다.
왜'std :: string'cut이 아닌가? – TeaOverflow
'value'는 샘플 예외의 전역 객체 또는 오타입니까? QString에 대한 예외가 확실합니까? 왜 당신의 예외 생성자는'const &'를 취하지 않습니까? – Mat
나는 똑같은 문제가 있었다. QString의 암묵적인 공유 메커니즘과 관련이있다. @Evgeni 네, 그래서'char *'; 그러나 그것은 그 질문과 아무 관련이 없습니다. – cmannett85