Gần đây tôi đã bắt đầu cố gắng thực thi const đúng đắn trong mã của mình. Trong định nghĩa hàm, tôi nuôi một con trỏ hằng cho một đối tượng liên tục của lớp LorentzM
:const đúng đắn và shared_ptr, một vấn đề thiết kế?
void AnalysisObject::SetOwnedPointer(const int maptotree_In, const LorentzM* const momentum_In){
owned_pp4_original.reset(momentum_In);
maptotree=maptotree_In;
}
nơi owned_pp4_original
là
shared_ptr<LorentzM> owned_pp4_original;
Tôi làm điều này, bởi vì chức năng này, SetOwnedPointer, không bao giờ nên thay đổi LorentzM* momentum_In
cũng không nên thay đổi đối tượng mà nó trỏ đến, do đó, liên tục trỏ đến đối tượng liên tục.
Tuy nhiên, một shared_ptr được tạo ra để các đối tượng nơi momentum_In điểm đến, và tôi làm muốn sử dụng shared_ptr này để thay đổi các đối tượng sau:
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
}
Vì vậy, một mặt, để được có thể làm:
owned_pp4_original.reset(momentum_In);
owned_pp4_original
phải là một shared_ptr<const LorentzM>
nhưng sau đó, tôi wouldn không thể thay đổi đối tượng thông qua nó.
Có gì sai trong ảnh này?
cảm ơn rất nhiều.
Cảm ơn bạn đã trả lời. Sau đó tôi hiểu lầm rằng một phần của const đúng đắn. Những gì bạn nói có ý nghĩa hơn. – elelias