在多继承后,使用delete导致断点问题

在多继承后,使用delete导致断点问题,谁能帮帮忙哇
具体情况:

#include <iostream>
using namespace std;

//零件抽象基类
class AbstractCPU
{
public:
	virtual void func() = 0;
	
};
class AbstractDisplayCard
{
public:
	virtual void func() = 0;
	
};
class AbstractMemoryChip
{
public:
	virtual void func() = 0;
	
};

//厂商
class FactoryIntel:public AbstractCPU, public AbstractDisplayCard, public AbstractMemoryChip
{
public:
	virtual void AbstractCPU::func()
	{
		cout << "CPU by FactoryIntel " << endl;
	}

	virtual void AbstractDisplayCard::func()
	{
		cout << "DisplayCard by FactoryIntel " << endl;
	}

	virtual void AbstractMemoryChip::func()
	{
		cout << "MemoryChip by FactoryIntel " << endl;
	}
};

//电脑类
class Computer
{
public:

	Computer(AbstractCPU * cpu, AbstractDisplayCard* dis, AbstractMemoryChip* mem)
	{
		
		m_cpu = cpu;
		m_dis = dis;
		m_mem = mem;
	}

	//析构函数释放零件
	~Computer()
	{
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;
		}

		if (m_dis != NULL)
		{
			delete m_dis;
			m_dis = NULL;
		}

		if (m_mem != NULL)
		{
			delete m_mem;
			m_mem = NULL;
		}
	}
	
	void doWork()
	{
		m_cpu->func();
		m_dis->func();
		m_mem->func();
	}

private:
	AbstractCPU *m_cpu;
	AbstractDisplayCard* m_dis;
	AbstractMemoryChip* m_mem;
};

void test()
{
	
	AbstractCPU* cpu = NULL;
	AbstractDisplayCard* dis = NULL;
	AbstractMemoryChip* mem = NULL;

	cout << "comp1 : " << endl;
	cpu = new FactoryIntel;
	dis= new FactoryIntel;
	mem = new FactoryIntel;	
	Computer* comp1;	
	comp1 = new Computer(cpu, dis, mem);
	comp1->doWork();
	delete comp1;	//这就报错了????
}

int main()
{
	
	test();

	system("pause");
	return 0;
}

发布了1 篇原创文章 · 获赞 1 · 访问量 30

猜你喜欢

转载自blog.csdn.net/qq_45330659/article/details/104993741