だからここに私が知っていることがあります:
- API で ivar を直接公開しないことが賢明です。むしろ、アクセサーを使用してください
const
非const
オブジェクトへのポインターは、単にオブジェクトを変更できることを意味しますが、ポインターが指す場所をリダイレクトすることはできません
これが私の状況です:
関連するクラスがいくつかあります。私は、合成を介してこれらを 1 つの論理インターフェイスに結合する単純なクラスを作成したいと考えています。囲まれた各クラスは、その API でパブリックとプライベートの区別が既にあるため、親クラスのユーザーに直接公開してもかまいません。これは、これらの ivar のアクセサーを作成するのはやり過ぎであることを意味します。なぜなら、クラスは既に公開されているものと公開されていないものを管理しているからです。しかし、この構成された親クラスに含まれる実際のオブジェクトをユーザーが変更することは望ましくありません。
したがって、これを行うために考えることができる唯一の方法はconst
、これらのオブジェクトへのポインターを使用することです。
class Parent{
public:
EnclosedClass1*const ec1; //users can enjoy the public API of EnclosedClass
EnclosedClass2*const ec2;
void convenienceMethod(){
//performs inter-related functions on both ec1 and ec2
}
}
ec1
このように、誰かがandの API と直接やり取りしても害はありませんが、少なくともその人が操作される実際のリソース、したがってポインターec2
を変更できないという点で、これがかなり確実であることを確認したいと思います。const
これは理にかなっていますか、それは const ポインターの適切な使用ですか?
別の方法として、それらをprivate
完全に作成し、ポインターを忘れて (このクラスはこれらのオブジェクトをとにかく管理します)、これらのオブジェクトに含まれるパブリック関数のアクセサーを記述するための余分な作業を行うこともできます。しかし、それはやり過ぎに思えますよね?