记住:
- 尽量以pass-by-reference-to-const替换pass-by-value。前者通常比较高效,并可避免切割问题(slicing problem)。
- 以上规则并不适用于内置类型,以及STL的迭代器和函数对象。对它们而言,pass-by-value往往比较适当。
class Person { public: Person(); virtual ~Person(); ... private: string name; string address; }; class Student: public Person { public: Student(); ~Student(); ... private: string schoolName; string schoolAddress; }; bool validateStudent(Student s); Student plato; bool platoIsOK = validateStudent(plato); //一次Student拷贝构造函数 //一次Person拷贝构造函数 //Student中的两个string拷贝构造函数 //Person中的两个string拷贝构造函数 //对应的六次析构函数u bool validateStudent(const Student& s); //这样就没有拷贝构造和析构函数的调用了
class Window { public: ... string name() const; virtual void display() const; }; class WindowWithScrollBars: public Window { public: ... virtual void display() const; }; void printNameAndDisplay(Window w) //不正确! { cout << w.name(); w.display(); } //参数w会被构造成一个Windows对象,WindowsWithScrollBars对象的特有信息都丢失了。 //因此总是调用Window::display //解决办法 void printNameAndDisplay(const Window& w) { cout << w.name(); w.display(); }
原文地址:https://www.cnblogs.com/pfsi/p/9218998.html
时间: 2024-10-01 03:52:48