【问题标题】:pointers in structs a memory leak?结构中的指针内存泄漏?
【发布时间】:2010-04-01 15:14:12
【问题描述】:
我在网上找不到任何提及...在结构中放置指针不是一件坏事吗? (至少在现代面向对象编程中)程序员不可避免地会造成内存泄漏,对吗? (除非他们,每次使用时,每次都解除内存的关联)
假设以上是正确的......在结构中使用指针是否被认为是一种不好的做法? - 特别考虑潜在的内存泄漏?
【问题讨论】:
标签:
memory
pointers
memory-leaks
【解决方案1】:
假设这是关于 C++ 的,如果 struct 指向的对象(或对象数组)属于 struct 的实例(即,实例负责正确删除对象)。
复制struct 的实例意味着复制其所有成员。之后,你会得到几个 struct 的实例,它们具有指向同一个对象的指针。当所有这些实例都将被删除时,您将不得不删除指针所指的对象。但是,如果其中一个即将被删除,通常很难判断其他实例是否仍在某处。
解决方法是引用计数,通过巧妙地实现构造函数、析构函数和赋值来完成。幸运的是,您不需要自己实现它,因为它已经在所谓的智能指针中完成了。您的标准库提供 TR1 的 std::tr1::shared_ptr 或者它已经带有 C++11 的 std::shared_ptr,或者您可以下载 boost libraries 并使用他们的 boost::shared_ptr。