摘要: class B{ public: virtual void f() const; }; class D: public B{ public: virtual void f(); }; 这里希望重新定义virtual函数B::f,但有个错误,B中的f是个const成员函数,但D中未被声明const。有编译器就这样说: warning:D... 阅读全文
posted @ 2012-02-19 23:58 lidan 阅读(268) 评论(0) 推荐(0) 编辑
摘要: Widget* pw = new Widget; 共有两个函数被调用:一个分配内存的operator new,一个Widget的default构造函数。 假设第一个调用成功,第二个却抛出异常。步骤一所分配内存必须取消并恢复旧观,否则会造成内存泄漏。这时,客户没能力归还内存,因为Widget构造函数抛出异常,pw尚未被赋值,客户手上也就没有指针指向该被归还的内存。取消步骤一,并恢复旧观... 阅读全文
posted @ 2012-02-19 23:01 lidan 阅读(1236) 评论(0) 推荐(0) 编辑
摘要: 实现一致性operator new必须返回正确的值,内存不足时必须调用new_handling函数,必须有对付零内存的准备,还需要避免不慎掩盖正常形式的new。 void* operator new(std::size_t size) throw(std::bad_alloc) { using namespace std; if (size ==... 阅读全文
posted @ 2012-02-19 20:45 lidan 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 为什么有人想要替换operator new 和 operator delete呢?三个常见的理由: 1.用来检测运用上的错误。 如果将“new所的内存”delete却不幸失败,会导致内存泄漏。如果在“new所得内存”身上多次delete会导致不确定行为。如果new持有一串动态分配的所得地址,operator delete将地址从中移走,倒是很容易检测出上述错误用法。此外各式各样的编程错误... 阅读全文
posted @ 2012-02-19 10:45 lidan 阅读(1218) 评论(0) 推荐(0) 编辑