申请网站免费,wordpress弹出框,WordPress的固态链接,快递网站模版一、C和java的差异
实例化方式
c的对象有两种实例化方式#xff0c;一种是局部变量中直接实例化。一种是new出来的。
MyClass myclass; //第一种方式
MyClass* myclassPtrnew MyClass(); //第二种方式java的对象构建#xff0c;没有第一种方式#xff0c;java的对象都…一、C和java的差异
实例化方式
c的对象有两种实例化方式一种是局部变量中直接实例化。一种是new出来的。
MyClass myclass; //第一种方式
MyClass* myclassPtrnew MyClass(); //第二种方式java的对象构建没有第一种方式java的对象都是new 出来的。
对象保存方式
在策略模式中策略的使用者需要保存一个策略策略是不可实例化的。 在java中可以这样
private Strategy strategy;此时strategy并没有示例化。此时只是保存一个stategy的指针。 但在C中上面的语法是错误的。
Strategy strategy; //错误因为上面的语法在C中是实例化Strategy对象。而Strategy是抽象类是不可实例化的。 所以C至少要像下面这样子才能实现java的效果也就是保存一个指针
Strategy* strategy; //正确内存
C以指针的方式保存了Strategy但strategy对象是由用户注入的。它不在使用Strategy的类的内部可能与使用Strategy的类生命周期不同。这就有可能导致使用已经死亡的Strategy或者造成内存泄漏。 java就没有这个问题首先因为java的对象都是new 出来的而且不是由用户delete所以不会存在使用已经死亡的Strategy。第二java本身提供垃圾回收机制所以用户没有在任何地方显式地回收Strategy的内存也不会造成Stategy对象的内存泄漏。
C策略模式的实现
C策略模式需要使用shared_ptr。shared_ptr管理的对象不需要用户手动管理内存所以不会造成内存泄漏。第二它相比于unique_ptr,允许多个地方指向同一个实际对象。实现策略模式需要这样的功能。因为使用Strategy的类以及使用Strategy的类外部都会有一个指针指向一个实际的strategy.
C策略实现的局限性
它使得用户不得按照局部变量中直接实例化实例化strategy。只能以new 的方式实例化策略对象并且要求用户有shared_ptr的相关知识因为传参时必须传shared_ptrStrategy的形式。