我在大学里学到了,你总是要释放未使用的对象,但是不知道如何实际操作。例如正确地构建您的代码等等。 在C ++中处理指针是否有任何通用规则?
目前我不允许使用boost。我必须坚持使用纯C ++,因为我正在使用的框架禁止使用任何泛型。
我在大学里学到了,你总是要释放未使用的对象,但是不知道如何实际操作。例如正确地构建您的代码等等。 在C ++中处理指针是否有任何通用规则?
目前我不允许使用boost。我必须坚持使用纯C ++,因为我正在使用的框架禁止使用任何泛型。
我曾经使用过嵌入式Symbian OS,它有一个出色的系统,完全基于开发者约定来实现。
基本上,如果一个类仅仅使用某些东西,它就使用引用。如果一个类拥有某些东西,它就使用指针。
这个系统工作得非常好,使用起来非常愉快。内存问题非常少见。
nullptr
,因此它不能像引用一样测试有效性(即:nullptr
是地址的属性,而不是该地址处数据的属性)... 除非每个观察者指针都通过向所有者注册以供以后更新或执行某些复杂操作的方式进行引用。 - underscore_d我在这里想再添加一条规则:
我们发现,对于新学习C++的程序员或者从Java等语言转过来的程序员,他们似乎会学到new关键字后,无论上下文如何,都会过度使用它来创建任何对象。当在函数内部局部创建一个对象来完成某些有用的任务时,这种使用new的方式可能会对性能造成负面影响,并且很容易在忘记相应的delete时引入愚蠢的内存泄漏。是的,智能指针可以帮助解决后者的问题,但它并不能解决性能问题(假设在幕后使用了new/delete或类似的东西)。有趣的是(也许),我们发现在使用Visual C++时,delete通常比new更昂贵。
这种混淆还来自于调用的函数可能会将指针甚至智能指针作为参数(当引用可能更好/更清晰时)。这使他们认为他们需要“创建”一个指针(很多人似乎认为这就是new的作用)才能传递指针给函数。显然,这需要一些关于如何编写API的规则,以使调用约定尽可能明确,并通过函数原型中提供的清晰注释来加强这些规则。
你好,
我建议阅读Scott Meyers的“Effective C++”相关章节。易于阅读,他涵盖了一些有趣的陷阱来捕捉不谨慎的人。
我也对缺乏模板感到好奇。所以没有STL或Boost。哇。
顺便说一句,让人们达成共识的惯例是一个很好的主意。就像让每个人都同意OOD的惯例一样。顺便说一句,“Effective C++”最新版没有第一版那么出色的关于OOD惯例的章节,这是遗憾的,例如公共虚拟继承始终模拟“isa”关系。
罗布
你可以从实现智能指针功能的一些基类中派生出所有内容(使用ref()/unref()方法和计数器)。
@Timbo强调的所有要点在设计该基类时都很重要。