1 / 4
文档名称:

C++箴言:用传引用给const取代传值.docx

格式:docx   大小:13KB   页数:4页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C++箴言:用传引用给const取代传值.docx

上传人:夜紫儿 2022/6/12 文件大小:13 KB

下载得到文件列表

C++箴言:用传引用给const取代传值.docx

相关文档

文档介绍

文档介绍:C++箴言:用传引用给const取代传值
public:
  Person(); // parameters omitted for simplicity
  virtual ~Person(); // see Item 7 for

C++箴言:用传引用给const取代传值
public:
  Person(); // parameters omitted for simplicity
  virtual ~Person(); // see Item 7 for why this is virtual
  ...
 private:
  std::string name;
  std::string address;
};
class Student: public Person {
 public:
  Student(); // parameters again omitted
  ~Student();
  ...
 private:
  std::string schoolName;
  std::string schoolAddress;
};
现在,考虑以下代码,在此我们调用一个函数—— validateStudent,它得到一个 Student 参数(以传值的方式),并返回它是否验证有效的结果:


bool validateStudent(Student s); // function taking a Student
// by value
Student plato; // Plato studied under Socrates
bool platoIsOK = validateStudent(plato); // call the function
当这个函数被调用时会发生什么呢?
很明显,Student 的拷贝构造函数被调用,用 plato 来初始化参数 s。同样明显的是,当 validateStudent 返回时,s 就会被销毁。所以这个函数的参数传递代价是一次 Student 的拷贝构造函数的调用和一次 Student 的析构函数的调用。
但这还不是全部。一个 Student 对象内部包含两个 string 对象,所以每次你构造一个 Student 对象的时候,你也必需构造两个 string 对象。一个 Student 对象还要从一个 Person 对象继承,所以每次你构造一个 Student 对象的时候,你也必需构造一个 Person 对象。一个 Person 对象内部又包含两个额外的 string 对象,所以每个 Person 的构造也担当着另外两个 string 的构造。最终,以传值方式传递一个 Student 对象的后果就是引起一次 Student 的拷贝构造函数的调用,一次 Person 的拷贝