如果不更改L
. 它是一个list<Publication>
- 它存储Publication
s,而不是Book
s。如果您将 a 推Book
入其中,它将被切成薄片,只剩下Publication
部分。
如果要以Publication
多态方式存储 s,则需要使用指针或引用。我建议使用以下方法之一:
// When the Library has sole-ownership of a dynamically allocated Publication:
std::list<std::unique_ptr<Publication>> L;
// When the Library has shared-ownership of a dynamically allocated Publication:
std::list<std::shared_ptr<Publication>> L;
// When the Library wants a reference to a Publication:
std::list<std::reference_wrapper<Publication>> L;
如果出于某种原因您不能使用其中任何一个,您当然可以将原始指针存储在L
.