【发布时间】:2012-12-14 14:18:32
【问题描述】:
我最近开始尝试在我的代码中强制执行 const 正确性。在函数定义中,我提供了一个指向 LorentzM 类的常量对象的常量指针:
void AnalysisObject::SetOwnedPointer(const int maptotree_In, const LorentzM* const momentum_In){
owned_pp4_original.reset(momentum_In);
maptotree=maptotree_In;
}
owned_pp4_original 在哪里
shared_ptr<LorentzM> owned_pp4_original;
我这样做是因为这个函数,SetOwnedPointer,不应该改变LorentzM* momentum_In,也不应该改变它指向的对象,所以它是指向常量对象的常量指针。
但是,shared_ptr 被创建到了momentum_In 指向的对象,我确实想在以后使用这个shared_ptr 来更改对象:
void ChangeLorentzM(const double px, const double py, const double pz, const double E){
owned_pp4_original->SetPxPyPzE(px,py,pz,E); //THIS CHANGES THE OBJECT
}
所以,一方面,能够做到:
owned_pp4_original.reset(momentum_In);
owned_pp4_original 应该是shared_ptr<const LorentzM>
但是,我将无法通过它更改对象。
这张图片有什么问题?
非常感谢。
【问题讨论】:
标签: c++ boost shared-ptr const-correctness