dynamic_pointer_cast从基到派生
dynamic_pointer_cast from base to derived
我的std::dynamic_pointer_cast
有问题
下面是我尝试做的一个例子:
class Base
{
public:
Base() { }
virtual ~Base() { }
};
class Derived : public Base
{
public:
Derived(int Data) : m_data(Data) { }
virtual ~Derived() { }
int GetData() { return m_data; }
private:
int m_data;
};
然后我尝试这样做:
Derived d(42);
std::shared_ptr<Base> BasePtr = std::make_shared<Base>(d);
// DerivedPtr is nullptr here.
std::shared_ptr<Derived> DerivedPtr = std::dynamic_pointer_cast<Derived>(BasePtr);
std::cout << DerivedPtr->GetData();
是否可以从基类转换为派生类,以便上面的代码打印5
?通过std::make_shared
从Derived
对象构造基指针
您应该调用
std::make_shared<Derived>(d);
以便它将创建派生对象。那么动态转换不会使失败
std::shared_ptr<Base> BasePtr = std::make_shared<Base>(d);
是从CCD_ 6复制构建CCD_。因此,动态铸造将失败。
指向Derived
的指向预定BasePtr
的直接路线是:
std::shared_ptr<Base> BasePtr = std::make_shared<Derived>(42);
其直接构造CCD_ 9对象,其中CCD_。
应用于此的动态演员阵容将起作用。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何理解C++标准N3337中的expr.const.cast子句8
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- C++Cast运算符过载
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用派生到基类的 boost 序列化"unregistered void cast"