C++ C++;将抽象类型的动态分配对象传递给函数并存储在vector中

C++ C++;将抽象类型的动态分配对象传递给函数并存储在vector中,c++,vector,abstract-class,dynamic-memory-allocation,unique-ptr,C++,Vector,Abstract Class,Dynamic Memory Allocation,Unique Ptr,在调用方方面,我希望通过流操作符传递特定超类的任意对象: 类子类:公共超类{…} 类子类B:公共超类{…} ... 集装箱; container您需要添加两件事情来实现这一点 首先,操作您可以始终使用std::shared_ptr和std::make_shared或者在您显示的情况下使用std::make_unique,对吗?或者你想避免使用智能指针?如果可能的话,我希望完全避免使用智能指针,但仅限于调用方。由于这个流函数经常被调用,如果我能像示例中所示传递原始对象,它会更干净。@Nuttrac

在调用方方面,我希望通过流操作符传递特定超类的任意对象:

类子类:公共超类{…}
类子类B:公共超类{…}
...
集装箱;

container您需要添加两件事情来实现这一点


首先,
操作您可以始终使用
std::shared_ptr
std::make_shared
或者在您显示的情况下使用
std::make_unique
,对吗?或者你想避免使用智能指针?如果可能的话,我希望完全避免使用智能指针,但仅限于调用方。由于这个流函数经常被调用,如果我能像示例中所示传递原始对象,它会更干净。@Nuttracker使用
共享的\u ptr
,其中
唯一的\u ptr
就足够了,这总是一个坏主意。@JaMiT,尽管引用问题的答案与此答案相同,问题仍然大不相同。这两个问题不是重复的,谢谢!第一个问题是打字错误,第二个解决方案非常适合。
class Superclass {
public:
    virtual Superclass *clone() const;  // optionally can be abstract
    // ...
};

Container & operator<<(Superclass const &child) {
  childs.emplace_back(child.clone());
  return *this;
}

class SubclassA : public Superclass {
    SubclassA *clone() const override {
        return new SubclassA(*this);
    }
};