您的位置:首页 > 编程语言 > C语言/C++

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

2011-10-25 09:36 721 查看
#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类的默认拷贝构造函数,但是在析构时候没有内存错误!请那位高人帮忙看看!在此先谢谢了!

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ null delete include class
相关文章推荐