C++ 拷贝构造函数深拷贝,浅拷贝无错误的浅拷贝?先看一个简单的例子,该例子是浅拷贝的典型代表,而且没有问题。?接下来看 Example 1 。 ?#ifndef _CPERSON_H ?#define _CPERSON_H ? class Cperson ?{ ? public: ? Cperson(int age); ? void Print(void); ? private: ? int m_age; ?}; ?#endif ?#include"" ?#include<> ? Cperson::Cperson(int age):m_age(age) ?{ ?} ? void Cperson::Print(void) ?{ ? cout<<"My age is "<<m_age<<endl; ?} ?#include"" ?#include<> ? void main(void) ?{ ? Cperson Tom(10); ? (); ? Cperson Jim(Tom); ? (); ?} 结果结果分析?对于语句 Cperson Jim(Tom) ,我们并没有定义相应的拷贝构造函数,编译器将会自动生成一个默认的拷贝构造函数。?默认拷贝构造函数所做的工作是,将一个对象的全部数据成员赋值给另一个对象的数据成员。? C++ 把只对象数据成员简单赋值这种情况称为“浅拷贝”。结果分析?听起来,编译器似乎很好,会提供一个我们没有定义的拷贝构造函数,但这后面存在巨大的风险。?所以有些事情(拷贝构造函数)还是自力更生不接受外援的好。有错误的浅拷贝?在接下来的 Example 2 中,我们将看到浅拷贝带来的错误。 ?#ifndef _CPERSON_H ?#define _CPERSON_H ? class Cperson ?{ ? public: ? Cperson(int age,char * name); ?~Cperson(); ? void Print(void); ? private: ? int m_age; ? char * m_name; ?}; ?#endif
C++拷贝构造函数(深拷贝,浅拷贝) 来自淘豆网m.daumloan.com转载请标明出处.