Всем привет!
Ситуация:
typedef std::auto_ptr<CGRecordset> CGRecordsetPtr;
//...
class CAppDBFactory
{
// ...
public:
CGRecordsetPtr CreatePreparedRecordset(const std::string&);
// ...
};
//...
CAppDBFactory Factory;
// Вот так все замечательно, компилятор не ругается
// CGRecordsetPtr pRecordset = Factory.CreatePreparedRecordset(sSQLText);
// а если делать так,
CGRecordsetPtr pRecordset;
pRecordset = Factory.CreatePreparedRecordset(sSQLText);
// то компилятор ругается
// Could not find a match for 'CGRecordsetPtr::operator =(CGRecordsetPtr)'
Действительно, такого определения в auto_ptr нет и быть не может, у = в качестве аргумента ссылка на CGRecordsetPtr.
Так вот я не пойму, почему при инициалицации копирующий конструктор срабатывает, а оператор = нет?