大家帮忙看看c++中派生类发生浅拷贝,但是在析构时候怎么没有内存错误!求解!

本文详细解析了C++中类继承与构造函数的使用方式,通过实例展示了如何正确实现拷贝构造函数,并解决析构时的内存管理问题。
#include <iostream>
#include <cstring>

using namespace std;

class Animal
{
    public:
        Animal(const char *m_name = NULL, int m_age = 1)
	:age(m_age), name(NULL)
	{   
	    if (NULL == m_name)
	    {
	        name = new char[1];
		*name = '\0';
		return;
	    }

	    name = new char[strlen(m_name) + 1];
	    strcpy(name, m_name);
	    
	    cout << "Animal constructure!" << endl;
	}

	Animal(Animal &temp)
	{
	    cout << "Animal copyconstructure!" << endl;

	    if (NULL == temp.name)
	    {
	        name = new char[1];
		*name = '\0';
		return;
	    }

	    name = new char[strlen(temp.name) + 1];
            strcpy(name, temp.name);
	    
	    age = temp.age;
	}

	~Animal()
	{
	    delete [] name;
	    cout << "Animal unconstructure!" << endl;
	}

	void show_info()
	{
	    cout << "Animal age:" << age << endl;
	    cout << "Animal name:" << name << endl;
	}
	
    private:
        char *name;
        int age;
};

class Dog:public Animal
{
    public:
        Dog(const char *p_name, int p_age, const char *m_name, int m_age = 1)
	:Animal(p_name, p_age), age(m_age), name(NULL)
        { 
            if (NULL == m_name)
	    {
	        name == new char[1];
		*name = '\0';
		
		return;
	    }
	     
            name = new char[strlen(m_name) + 1];
	    strcpy(name, m_name);

	    cout << "Dog constructure!" << endl;
        }

	~Dog()
	{
	    delete [] name;

	    cout << "Dog unconstructure!" << endl;
	}

    private:
        int age;
	char *name;
};

int main(void)
{
    Dog an("parent", 30, "child", 15);
    Dog bn(an);
    an.show_info();
    bn.show_info();

    return 0;
}

程序在用Dog类的对象an给bn初始化的时候,调用了Dog类的默认拷贝构造函数,但是在析构时候没有内存错误!请那位高人帮忙看看!在此先谢谢了!


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值