Здравствуйте! При использовании приватных классов столкнулся с небольшой проблемой.
Вот сам класс:
smthinfo.h: class SmthInfoPrivate;
class SmthInfo
{
Q_DECLARE_PRIVATE( SmthInfo )
public:
SmthInfo( const QString &name );
SmthInfo( const SmthInfo &info );
SmthInfo &operator=( const SmthInfo &info );
~SmthInfo();
const QString &name() const;
void setName( const QString &name );
private:
SmthInfoPrivate * const d_ptr;
};
smthinfo_p.h: class SmthInfoPrivate
{
public:
QString name;
};
smthinfo.cpp: SmthInfo::SmthInfo( const QString &name ) : d_ptr( new SmthInfoPrivate )
{
setName( name );
}
SmthInfo::SmthInfo( const SmthInfo &info ) : d_ptr( info.d_ptr )
{
}
SmthInfo &SmthInfo::operator=( const SmthInfo &info )
{
( SmthInfoPrivate * )d_ptr = info.d_ptr;
return *this;
}
SmthInfo::~SmthInfo()
{
Q_D( SmthInfo );
delete d;
}
const QString &SmthInfo::name() const
{
Q_D( const SmthInfo );
return d->name;
}
void SmthInfo::setName( const QString &name )
{
Q_D( SmthInfo );
d->name = name;
}
Дело в том, что если делать так:
{
SmthInfo s( "name" );
{
SmthInfo pinfo( "name 2" );
s = pinfo;
}
qDebug( "!!!", qPrintable( s.name() ) );
}
то приложение вылетает. Как я понял, это происходит из-за того, что объект уже будет удален к вызову name(). Если да, то как это исправить?