1.定位new: new (addr) 类型。
通过这种方式,可实现
内存分配与对象构造的分离。
3.new 和delete 的定制,类可以通过new, delete的操作符重载来接手内存的管理,如可以预先分配内存,从其中分配内存,动态内存也释放回其中。
static void* operator new (size_t);
static void operator delete(void *); 或
static void operator delete(void *, size_t);//在继承关系的类中
在具有动态类型的时候,通过定义虚析构函数,通过基类指针来析构派生类对象才是可行的。
4.delete 单个对象 delete[] 对象数组,如果delete 对象数组,那么只会析构第一个数组对象,后面均不会析构。
5.垃圾回收:智能指针(引用计数)的开销最小,但
无法解决循环引用问题。可以通过接手内存分配与管理来实现对象的标记与清除,
如何接手内存分配与管理,分别对待? 毕竟有些内存分配可能无法接收,如内置数据的分配,外部库的对象内存分配策略。这种方法开销大。总结:由于C++没能在语言层面实现垃圾回收,导致要实现完全的垃圾回收很难,几乎不可能。
http://techsingular.net/?p=229 (C++与垃圾回收,C++)
http://www.2cto.com/kf/201110/108419.html (C++中几种经典的垃圾回收算法)