环境是科学计算软件,速度非常关键。
比如有一个类
A{
public:
T * p = NULL;
A(){}
T* getP () {if(p == NULL)p=new T(); return p;}
~A() (if(p!=NULL){delete p;p=NULL;})
}
现在需要
for(){
A a();
if(validate(a))vector.insert(a);
}
此时,由于变量a的作用域仅仅在for循环内部,在跳出当前循环步的时候就会调用析构函数。如果用户选择了与p有关的功能,就会删掉有价值的p,此时vector内部的a的拷贝却不知道已经删除了,因此会造成bug。
因为
*p是一个占空间大,算起来很慢,很可能用户用不到的成员,所以使用指针来存的
同样因为p计算代价太大了,算了之后就不想再次重新计算
同样的理由,不想实现rule of 3,不想遍历p,或者把*p深拷贝处理
目前我使用在scope外面保存A的临时变量的方法来加强临时变量的生命周期,比如
vector tmp;
for(){
tmp.insert(A());
A & a = tmp[i];
if(validate(a))vector.insert(a);
}
因为与*p相关的业务逻辑到这里就完了所以还好,
但我想知道有没有更标准更优雅点的方法?
守候你守候我