类内返回从堆分配的指针合理吗?在线等。(高手进!!!)
以前看effective c++时记得有一条是这样说的:
不要从类内返回堆上分配的指针。
也也就是说
class aClass
{
public:
int* fun()
{
new int;
}
}
也就是说上面的类设计的不好,很容易造成内存泄漏,因为使用这个类的程序员必须在调用fun函数后记得释放内存。
但是这几天研究CppUnit的源代码,却发现很多从类内返回堆分配的指针的例子
比如Test是由TestFactory创建的(用new分配的内存),但是内存的释放却是由Testsuite类来完成,
还有有很多这样的例子。
CppUnit使用的大量的设计模式,用了大量的指针,是不是使用设计模式就必须象CppUnit这样分配和释放内存?但这是和Effective上的条款是违背的啊!!!而且也确实比较容易混乱,你在这个类分配内存,却必须在另一个类释放。
小弟一直迷惑的地方。请高手解答。多谢!!!