[ create a new paste ] login | about

Link: http://codepad.org/rD4LOYi3    [ raw code | output | fork | 2 comments ]

k06a - C++, pasted on Mar 27:
#include <memory>

class A;
class B;
typedef std::tr1::shared_ptr<A> APtr;
typedef std::tr1::shared_ptr<B> BPtr;

class A
{
    virtual A * copy();
    virtual APtr copy2();
};

class B : public A
{
    virtual B * copy();
    virtual BPtr copy2(); // Error: invalid covariant type
};

int main()
{
}


Output:
1
2
Line 17: error: invalid covariant return type for 'virtual BPtr B::copy2()'
compilation terminated due to -Wfatal-errors.


Create a new paste based on this one


Comments:
posted by cdriper on Mar 27
ну да, послабление на возвращаемый тип при переопределении методов не будет работать с shared_ptr

с другой стороны, зачем тебе такой *виртуальный* метод, если на уровне базового класса все равно возвращалось APtr.
раз ты хочешь получить BPtr, значит используешь скорее всего не полиморфно.

reply
posted by k06a on Mar 27
Сейчас я это уже понимаю, но раньше этот прием мне чем-то облегчал жизнь.
reply