考虑下面代码中显示的类的关系:
android:adjustViewBounds
为什么打印ImageView
而不是class Base
{
virtual getValue() { return 0; }
};
class Derived: public Base
{
getValue() override { return 1; }
};
class Another
{
Base* makeClass( bool );
void createVector();
};
Base* Another::makeClass( bool base )
{
if( base )
{
return new Base();
}
else
{
return new Derived();
}
}
void Another::createVector()
{
std::vector<Base> vector;
vector.emplace( *makeClass( false ) );
std::cout << vector[0].getValue();
}
?
是否在添加到向量时将0
转换为1
?
答案 0 :(得分:0)
“添加到向量时,它是否将Derived*
转换为Base
?”是。
在
vector.emplace( *makeClass( false ) );
*makeClass( false )
取消引用返回的指针并将其切成Base
。此Base
存储在vector
要解决此问题,
std::vector<Base *> vector; // but watch out for Cylons
vector.emplace( makeClass( false ) );
std::cout << vector[0]->getValue();
或者更好的是,研究std::unique_ptr
并让智能指针内存管理为您工作。