Steven548 2021-12-31 19:01 采纳率: 100%
浏览 29
已结题

c++ 多继承,指针在堆上开完空间以后怎么销毁

问题遇到的现象和发生背景

多继承,指针在堆上开完空间以后怎么销毁

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <string>
#include <memory>

using namespace std;//命名空间

class interface1
{
public:
    virtual void func1(int a, int b) = 0;
    virtual void func3(int a) = 0;
};

class interface2
{
public:
    virtual void func2(int a, double b) = 0;
};

class Child:public interface1, public interface2
{
public:
    virtual void func1(int a, int b)
    {
        cout << "func1" << endl;
        cout << a << "||" << b << endl;
    }
    virtual void func3(int a)
    {
        cout << "func3" << endl;
        cout << a << endl;
    }
    virtual void func2(int a, double b)
    {
        cout << "func2" << endl;
        cout << a <<  "||" << b << endl;
    }
};

void test(interface1* if1, interface2* if2)
{
    if1->func1(10, 20);
    if1->func3(10.5);
    if2->func2(200, 15.6);
    if (if1 != NULL)
    {
        delete if1;
        if1 = NULL;
    }
    if (if2 != NULL)
    {
        delete if2;
        if2 = NULL;
    }

}


int main(void)
{
    //Child child;
    //test(&child, &child);
    interface1* if1 = new Child;
    interface2* if2 = new Child;
    test(if1, if2);
    if1 = NULL;
    if2 = NULL;
    return 0;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 书山客 2021-12-31 19:13
    关注
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string.h>
    #include <string>
    #include <memory>
    using namespace std;//命名空间
    class interface1
    {
    public:
        virtual void func1(int a, int b) = 0;
        virtual void func3(int a) = 0;
        virtual ~interface1() {}
    };
    class interface2
    {
    public:
        virtual void func2(int a, double b) = 0;
        virtual ~interface2() {}
    };
    class Child:public interface1, public interface2
    {
    public:
        virtual void func1(int a, int b)
        {
            cout << "func1" << endl;
            cout << a << "||" << b << endl;
        }
        virtual void func3(int a)
        {
            cout << "func3" << endl;
            cout << a << endl;
        }
        virtual void func2(int a, double b)
        {
            cout << "func2" << endl;
            cout << a <<  "||" << b << endl;
        }
    };
    void test(interface1* if1, interface2* if2)
    {
        if1->func1(10, 20);
        if1->func3(10.5);
        if2->func2(200, 15.6);
        if (if1 != NULL)
        {
            delete if1;
            if1 = NULL;
        }
        if (if2 != NULL)
        {
            delete if2;
            if2 = NULL;
        }
    }
     
    int main(void)
    {
        //Child child;
        //test(&child, &child);
        interface1* if1 = new Child;
        interface2* if2 = new Child;
        test(if1, if2);
        return 0;
    }
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月31日