Здравствуйте! При использовании приватных классов столкнулся с небольшой проблемой.
Вот сам класс:
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;
	};
	class SmthInfoPrivate
	{
	public:
		QString name;
	};
	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(). Если да, то как это исправить?