std :: shared_ptr和继承

b

我在shared_ptr继承的类之间进行自动类型转换时遇到一些问题

我的类结构如下,一个基类Base和两个派生类Derived1Derived2

// Base class
class Base {
protected:
  ...
  ...
public:
  Base() = default;
  virtual ~Base() = default;
  virtual void run() = 0;
  ...
  ...
};

// Derived class
class Derived1: Base {
protected:
  ...
  ...
public:
  Derived1() = default;
  virtual ~Derived1() = default;
  void run() {...}
  ...
  ...
};

// Derived class
class Derived2: Base {
protected:
  ...
  ...
public:
  Derived2() = default;
  virtual ~Derived2() = default;
  void run() {...}
  ...
  ...
};

我有一个功能 doSomething()

void doSomething(std::shared_ptr<Base> ptr) {
  ptr->run();
  ...
}

我用派生类调用函数,如下所示:

doSomething(make_shared<Derived1>())
doSomething(make_shared<Derived2>())

但我得到一个错误,说-

no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'

我究竟做错了什么?仅用于static_pointer_cast基本类型是否安全喜欢 -

doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))

解决方案我的错...问题是我私下继承了基类。

比尔·林奇

据我所知,您提供的代码可以很好地编译:http : //ideone.com/06RB2W

#include <memory>

class Base {
    public:
        Base() = default;
        virtual ~Base() = default;
        virtual void run() = 0;
};

class Derived1: public Base {
    public:
        Derived1() = default;
        virtual ~Derived1() = default;
        void run() {}
};

class Derived2: public Base {
    public:
        Derived2() = default;
        virtual ~Derived2() = default;
        void run() {}
};

void doSomething(std::shared_ptr<Base> ptr) {
    ptr->run();
}

int main() {
    doSomething(std::make_shared<Derived1>());
    doSomething(std::make_shared<Derived2>());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

继承和智能指针(std :: shared_ptr)

来自分类Dev

std :: function和shared_ptr

来自分类Dev

std :: enable_if和std :: shared_ptr

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

使用std :: shared_ptr和指向成员函数的指针

来自分类Dev

使用std map和shared_ptr的奇怪内存行为

来自分类Dev

std::shared_ptr(s) 和内存泄漏

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类常见问题

在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?

来自分类Dev

std :: shared_ptr,std :: weak_ptr和控制块

来自分类Dev

std :: unique_ptr和std :: shared_ptr之间的破坏行为差异的原理是什么?

来自分类Dev

我在链表实现中的std :: shared_ptr和std :: unique_ptr怎么办?

来自分类Dev

在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

来自分类Dev

如何取得std :: unique_ptr和std :: shared_ptr的所有权

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

std :: shared_ptr预分配内存

来自分类Dev

std set of boost :: shared_ptr <string>

来自分类Dev

可重用的std :: shared_ptr

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

std :: shared_ptr初始化

来自分类Dev

如何访问std :: shared_ptr的内容?

来自分类Dev

std :: shared_ptr删除者类型

来自分类Dev

移动 std::shared_ptr 的函数声明