я увидел следующий код,C++ - Есть ли неявный приведение от Fred * к auto_ptr <Fred>?
#include <new>
#include <memory>
using namespace std;
class Fred; // Forward declaration
typedef auto_ptr<Fred> FredPtr;
class Fred {
public:
static FredPtr create(int i)
{
return new Fred(i); // Is there an implicit casting here? If not, how can we return
// a Fred* with return value as FredPtr?
}
private:
Fred(int i=10) : i_(i) { }
Fred(const Fred& x) : i_(x.i_) { }
int i_;
};
Пожалуйста, смотрите вопрос, указанный в функции создания.
Спасибо
// обновляется на основе комментариев
Да, код не может передать ошибку C2664 VC8.0 : «зЬй :: auto_ptr < _Ty> :: auto_ptr (Std :: auto_ptr < _Ty> &) бросок()»: не удается преобразовать параметр 1 из 'Fred *' до 'станд :: auto_ptr < _Ty> &'
код был скопирован с C++ FAQ 12.15.
Однако после внесения следующих изменений,
replace
return new Fred(i);
with
return auto_ptr<Fred>(new Fred(i));
Этот код может передать VC8.0 компилятор. Но я не уверен, правильно ли это исправление.
Скомпилировал ли этот код? Или вы просто это видели? –
Оригинальное сообщение не имеет. – q0987
Это правильное решение. Да. –