c++ - 如何复制 shared_ptr 的 vector ?

标签 c++ c++11 inheritance shared-ptr

<分区>

shared_ptrvector 到基类。

struct Base
{
    virtual ~Base() = 0 {}
};

struct Derived1 : Base
{
};

struct Derived2 : Base
{
};

std::vector<std::shared_ptr<Base>> v;
v.push_back(std::make_shared<Base>(Derived1()));
v.push_back(std::make_shared<Base>(Derived2()));

如何复制vector
拷贝的指针必须指向新对象。

最佳答案

您应该向Base 添加一个纯virtual 成员函数,例如clone。在派生的 classes 中实现它,然后执行如下操作:

std::vector<std::shared_ptr<Base>> copy(std::shared_ptr<Base> const &input) {
    std::vector<std::shared_ptr<Base>> ret;
    ret.reserve(input.size());
    for(auto const &p: input) {
        ret.push_back(p->clone());
    }
    return ret;
}

话虽这么说,但这是个坏主意。您正在破坏语义,例如直接分配 vector 和复制构造函数,因为它们不会执行用户期望的操作(假设您实际上需要为每个对象创建一个新实例)。

关于c++ - 如何复制 shared_ptr 的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49321107/

相关文章:

c++ - 为什么 std::cout 在线程中被抢占但 printf 却没有?

c++ - C++ 中的继承和更改变量

java - 继承问题,为什么不能打印正确的结果?

android - 堆栈有多大,我用了多少?

c++ - 如何检测窗口(gtk、qt 等)应用程序的内存泄漏?

c++ - 在 GCC 与 MSVC2010 中的 init 上调用基类构造函数

c++ - 指向类模板方法的 void 指针的 vector

c++ - 我不明白为什么 'Derived1' 需要与 'Derived3' 相同的内存量

c++ - 根据用户配置在运行时链接共享对象

c# - 为什么从带有 where 子句的抽象类派生的类不能强制转换为它的最低公共(public)类