DevicePointerをカプセル化するクラス がありstd::shared_ptr<Device>ます。Device へのポインターを保持する必要があるさまざまなクラスは、から派生しDevicePointerます。を使い始める前にshared_ptr、生のポインターをデバイスに返す関数がありましたDevicePointer。::Expose()現在、デバイス ポインターを保持するために shared_ptr を使用していますが、それを返す方法がわかりません。呼び出す必要がある唯一の理由::Exposeは、ポインターを逆参照することであることに注意してください。
元の Expose は次のようになります。
Device * Expose() const { return MyDevice; }
次のように使用されます。
Device::Expose()->ExecuteFunction(a, b, c);
今MyDeviceはstd::shared_ptr<Device>です。逆参照のためにそれを返す方法がわかりません。明らかな選択は次のとおりです。
std::shared_ptr<Device> Expose() { return MyDevice; }
しかし、パフォーマンス、特に新しい一時的な作成が心配std::shared_ptrです。したがって、「このポインターを逆参照することはできますが、コピーすることはできません」と言う方法が必要です。多くのオブジェクトがオリジナルへの参照を保持するため、オリジナルは共有する必要があります。
私の質問を適切に表現できたことを願っています。ありがとう。