记忆处理是否违反单一责任原则?

时间:2014-05-24 14:50:04

标签: c++ memory solid-principles single-responsibility-principle pointers

SRP : There should never be more than one reason for a class to change

如果我的class A的责任正在履行taskAclass A内的内存处理是否违反了SRP?如果是这样,可以接受吗?我们有什么解决方案?

注意:使用deletea std smart_ptr是相同的,它仍然是一种内存处理(例如:我们可能想要更改unique_ptr auto_ptr等...)。

以下是我认为可以解决的问题。我觉得它不够好因为MemoryHandler必须改变有两个原因:如果A需要更多的属性,或者我们想要另一种处理内存的方式。

注意这些例子:通常你会有很多方法(成员函数)和多个属性(成员变量)。 我们可以假设own_ptr是一个仿函数(算法/模式策略)或class Atask A所需的任何其他内容。

示例1(cpp):

class A {
   Object* owned_ptr;

public:
   taskA() { ... }
   ~A() { delete owned_ptr; }
};

示例2(cpp):

class MemoryHandler {
   Object* owned_ptr;
public :
   Object* object() { return owned_ptr; }
   ~MemoryHandler() { delete owned_ptr; }
};

class A {
   MemoryHandler data;

public:
   taskA() { ... }
   ~A() { }
};

1 个答案:

答案 0 :(得分:2)

务实地说,示例中的内存处理不违反SRP。您在您的环境中遵循标准的内存处理方法,这并没有真正增加单独的责任。例如,你不会说实例化对象是一个单独的责任,你的情况并非完全不同。

(如果您编写了自己的分配器,并且您的类中充满了低级内存管理代码和更高级别的域代码,那将是另一回事。)