オブジェクトへのポインターを返す関数があります。このような:
class SomeClass
{
public:
Object* getObject() const { return &obj; };
private:
Object obj;
}
問題は、返されたオブジェクトを変更する呼び出し関数を使用しないことです。内部で操作する関数を呼び出す可能性がありますが、SomeClass 内のobjを変更しないでください...例は理解しやすいかもしれません:
-関数がconstオブジェクトへのポインタを返す場合const Object* getObject() const
、呼び出し元の関数はオブジェクトの非constメソッドを使用できません(ただし、できるようにしたいです)。
-単純にポインターを返すと、呼び出し元の関数がオブジェクトを変更する可能性があります。
Object* pointer = sclass.getObject();
*pointer = Object();
そのため、 sclass内のオブジェクトは別のオブジェクトになりました (これは望ましくありません)。
回避策はありますか?