c++ - 抽象类的 std::shared_ptr 实例化派生类

标签 c++ inheritance c++11 smart-pointers

<分区>

我正在尝试使用 std::shared_ptr , 但我不确定我是否可以使用 shared_ptr对于一个抽象类,并从这个智能指针调用派生类。这是我目前的代码

IExecute *ppCIExecuteExecuteOperation = NULL;

for(int i = 0; i < 3; ++i)
{
    switch (stOperationType.key)
    {
        case E_OPERATIONKEY::DrawCircle:
        pCIExecuteExecuteOperation = new CCircle();
        break;
        case E_OPERATIONKEY::DrawSquare:
        pCIExecuteExecuteOperation = new CSquare();
        break;
        case E_OPERATIONKEY::Rhombus:
        pCIExecuteExecuteOperation = new CRehombus();
        break;
        default:
        break;
    }
} 
pCIExecuteExecuteOperation->Draw();

这里IExecute是抽象类,CCircle、CSquare、CRhombus是IExecute的派生类。

我只想使用 shared_ptr<IEXectue>pCIExecuteExecuteOperation(nullptr) 并在 switch 语句中使其指向派生类之一,我该如何实现?

编辑: 答案是使用 make_shared 或 reset()

谢谢大家,我没想到会这么简单。

最佳答案

这很简单。看代码感受下。

std::shared_ptr<IExecute> ppCIExecuteExecuteOperation;

for(int i = 0; i < 3; ++i)
{
    switch (stOperationType.key)
    {
        case E_OPERATIONKEY::DrawCircle:
            pCIExecuteExecuteOperation.reset(new CCircle());
            break;
        case E_OPERATIONKEY::DrawSquare:
            pCIExecuteExecuteOperation.reset(new CSquare());
            break;
        case E_OPERATIONKEY::Rhombus:
            pCIExecuteExecuteOperation.reset(new CRehombus());
            break;
        default:
            break;
    }
} 
pCIExecuteExecuteOperation->Draw();

关于c++ - 抽象类的 std::shared_ptr 实例化派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405034/

相关文章:

c++ - 如何找出一个类型是否具有任何返回类型的成员函数?

C++ INET 菜鸟,我做错了什么?

c++ - 如何找出 C++ header 在 Visual Studio 中编译需要多少时间?

java - 即使我不在子类中调用 super() ,程序也会抛出错误,因为必须定义一个显式构造函数

java - 为什么java类的构造函数不被继承呢?

c++ - 将范围拆分为子范围

具有 Unresolved 重载调用成员函数的 C++ 成员函数

c++ - 用于简化类构造函数的前向声明容器

java - Android扩展Activity

c++ - 如何调用 clang++ 或 g++ 来准确复制两个不同标准版本中的需求