![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
effective c++学习笔记
traceorigin
这个作者很懒,什么都没留下…
展开
-
【条款6】Explicitly disallow the use of compiler-generated functions you do not want
我们都知道,如果不想让一个class具有某一功能,只要不声明具有该功能的函数成员即可。可是对于copy construct 和 copying assignment确不是这样的,因为即使你不声明这两个函数,编译器也会自动为你生成。所以如果你想让class不具有这个功能,必须要做点工作了。 方法是: 1.将copy construct和copying assignment声明为private;原创 2012-10-26 15:38:09 · 426 阅读 · 0 评论 -
【条款9】Never call virtual functions during construction or destruction
"在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class" class base{ public: base(); virtual void log() const = 0; }; base::base() { ... log(); } class derived:public base{ public: virtual void log()原创 2012-10-26 18:52:18 · 529 阅读 · 0 评论 -
【条款10】Have assignment operators return a reference to *this
运算符重载的一个原则就是:与内置类型的运算符具有一致的性质。 对于赋值操作符,内置类型可以连锁赋值,即 x=y=z=1; 为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参。 class A{ public: A& operator=(const A& a) { ... return *this; } A& operator+=(co原创 2012-10-26 19:02:46 · 624 阅读 · 0 评论 -
【条款5】know what functions C++ silently writes and calls
如果没有为一个类声明construct function、copy construct function、copy assignment function、destruct function,编译器就会为之声明默认版本。 class Empty{ public: Empty() {...} Empty(const Empty &ths) {...} ~Empty() {...} Emp原创 2012-10-22 14:36:22 · 536 阅读 · 0 评论 -
【条款7】Declare destructors virtual in polymorphic classes
class base{ public: base() {} ~base() {} }; class derived: pubic base {...}; base *ptr = new derived(); delete ptr; 一:这时候就会出现问题,因为一个derived的对象经由一个base class指针删除,而其析构函数又是non-virtual,所以会造成derived c原创 2012-10-26 18:12:53 · 464 阅读 · 0 评论 -
【条款11】Handle assignment to self in operator=
在重载“operator=”时,若类中涉及到了资源的动态分配,则一定要考虑自我赋值的情况,否则容易造成内存泄露。 下面是一个不安全的示例: class A{ public: A& operator=(const A& a) { delete data; size = a.size; data = new int[size]; for(int i=0; i<size; i++原创 2012-10-26 19:38:16 · 514 阅读 · 0 评论 -
【条款12】Copy all parts of an object
一:"Copying"函数应该确保赋值“对象内的所有成员变量”以及“所有base class成分” class derived:public base{ public: derived(const derived& rhs); derived& operator=(const derived& rhs); private: int data; }; derived::derived(co原创 2012-10-26 19:52:30 · 482 阅读 · 0 评论