SRP : There should never be more than one reason for a class to change
如果我的class A
的责任正在履行taskA
。 class A
内的内存处理是否违反了SRP?如果是这样,可以接受吗?我们有什么解决方案?
注意:使用delete
或a std smart_ptr
是相同的,它仍然是一种内存处理(例如:我们可能想要更改unique_ptr auto_ptr等...)。
以下是我认为可以解决的问题。我觉得它不够好因为MemoryHandler必须改变有两个原因:如果A需要更多的属性,或者我们想要另一种处理内存的方式。
注意这些例子:通常你会有很多方法(成员函数)和多个属性(成员变量)。
我们可以假设own_ptr是一个仿函数(算法/模式策略)或class A
和task 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() { }
};
答案 0 :(得分:2)
务实地说,示例中的内存处理不违反SRP。您在您的环境中遵循标准的内存处理方法,这并没有真正增加单独的责任。例如,你不会说实例化对象是一个单独的责任,你的情况并非完全不同。
(如果您编写了自己的分配器,并且您的类中充满了低级内存管理代码和更高级别的域代码,那将是另一回事。)