C++ 使用没有动态分配的接口(interface)

标签 c++ interface

我正在尝试使用接口(interface)

class IDemo
{
    public:
        virtual ~IDemo() {}
        virtual uint32_t Some_Operation(uint32_t a, uint32_t b) = 0;
};





class Child_A : public IDemo
{
    public:
        virtual uint32_t Some_Operation(uint32_t a, uint32_t b);
};



class Child_B : public IDemo
{
    public:
        virtual uint32_t Some_Operation(uint32_t a, uint32_t b);
};

Child_A::Some_Operation 返回 a+b 的总和 Child_B::一些操作返回产品a*b

用法如下

bool Test_Inferface()
{

    IDemo* pDemo = new Child_B();

    uint32_t product = pDemo->Some_Operation(1, 2);

    delete pDemo;

    if (2 != product)
    {
        return false;
    }


    pDemo = new Child_A();

    uint32_t sum = pDemo->Some_Operation(1,2);

    delete pDemo;

    if(3 != sum)
    {
        return false;
    }

    return true;
}

由于可能的内存泄漏,我试图避免新建/删除。 是否可以静态分配接口(interface)?

IDemo test = Child_A();

编译器不喜欢那样。

最佳答案

非常简单。多态性(接口(interface))与动态分配无关。如果你不想动态分配,那就不要。

您的示例很容易像这样工作:

bool Test_Inferface()
{

    Child_B child_b;

    uint32_t product = child_b.Some_Operation(1, 2);

    if (2 != product)
    {
        return false;
    }


    Child_A chile_a;

    uint32_t sum = child_a.Some_Operation(1,2);

    if(3 != sum)
    {
        return false;
    }

    return true;
}

您可能需要一个实际使用接口(interface)的更好示例。

// here we have an interface reference parameter that doesn't care if what is
// passed to it is dynamically allocated or sitting on the stack.
uint32_t better_example(IDemo& demo)
{
    return demo.Some_Operation(1, 2);
}

bool Test_Inferface()
{

    Child_B child_b;

    uint32_t product = better_example(child_b);

    if (2 != product)
    {
        return false;
    }


    Child_A chile_a;

    uint32_t sum = better_example(child_a);

    if(3 != sum)
    {
        return false;
    }

    return true;
}

关于C++ 使用没有动态分配的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51584809/

相关文章:

c++ - 板球记分牌上的程序

c++ - 从标准输入读取文本直到遇到一个确切的字符,保存它,然后继续读取直到行尾

c++ - 使用 curl 下载文件时确定扩展名?

c# - 为什么接口(interface) A 对接口(interface) B 隐藏属性

interface - 嵌入式结构的覆盖行为

c# - 告诉 C# 变量具有接口(interface)的属性

c++ - C++ 引用/指针语法的替代方法

c++代码缓慢且超过时间限制

typescript - 根据映射键从接口(interface)映射中选择类型

c++ - 公开组合成员对象是个好主意吗?