|
|
1
6
很明显,您希望向调用者返回一个不需要保留任何引用的新对象。为此,最简单的方法是按值返回对象。
然后在调用代码中,您可以这样构造新对象。
这避免了返回临时引用或要求客户机到管理器删除返回的指针的任何顾虑。注意,这确实要求您的对象是可复制的,但对于按值返回时要避免的复制,这是一种合法且通常实现的优化。 如果需要共享所有权或对象的生存期超出调用函数的范围,则只需要考虑共享指针或类似对象。在后一种情况下,您可以将此决定留给客户机,并且仍然按值返回。 例如。
|
|
|
2
12
是的,这会导致内存泄漏。 您要做的是,在RETURN语句中,取消对您创建的新对象的引用。编译器将调用赋值运算符作为返回的一部分,并将新对象的内容复制到调用方法中分配给它的对象。 新对象将留在堆上,其指针将从堆栈中清除,从而造成内存泄漏。 为什么不返回一个指针并用这种方式管理它呢? |
|
|
3
5
调用析构函数和释放内存是C++中的两个不同的事情。
当OtherClass超出范围时,将调用析构函数,但不会释放内存。
作为一个建议,当您感觉到您已经完全理解C++中的指针时,查看智能指针,例如Boost智能指针,以减轻C++中的内存管理生命。(如见 article 这里介绍) |
|
|
4
2
您有两个其他类对象: 一个是n,它在堆栈上创建,并在超出范围时成功删除。 另一个是您在堆上创建的,在我的方法中。这个永远不会被删除,它会导致内存泄漏。 |
|
|
5
2
如果可能,您可以考虑std::auto_ptr或boost/c0x shared_ptr来简化内存管理。 |
|
|
6
2
通常,当一个本地对象超出范围时,它的内存是 释放 因为它是在堆栈上分配的,堆栈会自动清理。因为对象是在堆上分配的,所以无法自动释放它。释放它的唯一方法是显式调用delete。 我想你可以这样做:
声明另一个类
|
|
|
7
2
如果您坚持堆栈分配,则不要使用
然后打电话
为了让这种模式发挥作用,
|