我有以下数据类型:
class A{
public:
A(){
}
~A(){
for(size_t i=0; i<b_elements.size(); i++)
delete b_elements[i];
b_elements.clear();
}
vector<B*> b_elements;
//other operations ...
};
实现了访问者设计模式以对A
.
当我想处理的子集b_elements
并将访问者专门应用于这些元素时,问题就开始了。
一种解决方案是创建另一个对象,A
它b_elements
指向原始对象中的所需元素,并在新创建的对象上调用访问者。但是(如您所料)问题是当新对象被销毁时,析构函数将删除那些会影响原始对象的引用作为副作用。
提示:我无法从原始对象创建所需的副本,b_elements
因为它太昂贵了。
我的问题是,这是一种常见的模式吗?避免此类问题的最佳做法是什么?