提供swap接口以便于交换两个对象,中间不要抛出异常。
提到了Pimpl,pointer to implementation,一种经常使用到的实现模式,减少耦合,减少由于头文件变动引发的不必要的重编译。
wiki上说的挺清楚:
有一个Book类,由于变动,新加入了m_Title成员。其对应的Book.h肯定要修改,那么对应包含了Book.h的所有文件都需要重新编译,即使关于Book对象他们只知道print接口,这是一个内部私有成员变动,外界不应该感知,引发了不必要的重新编译。
- class Book {
- public:
- void print();
- private:
- std::string m_Contents;
- std::string m_Title;
- }
我们将Book的内部实现放到一个BookImpl的新类中,不对外提供,Book类中只保留该类的指针(或使用智能指针等容器)。这样Book内部再有什么数据成员改动,客户也不会感知到。
- class Book {
- public:
- void print();
- private:
- class BookImpl;
- BookImpl* m_p;
- };
- Book::Book()
- {
- m_p = new BookImpl();
- }
- void Book::print()
- {
- m_p->print();
- }
阅读(401) | 评论(0) | 转发(0) |