0

コンテキスト: シンプルなライブラリを作成しています。その中で、作成したクラスの 1 つを返します。これは、a) スタックで宣言し、ヒープ上にある必要がある場合はユーザーがヒープにコピーすることを期待するか、b) で宣言することができます。ヒープを使用して、ユーザーがdeleteオブジェクトを使い終わったときにオブジェクトに期待します。

これらの方法のどれがベスト プラクティスであり、明確な勝者がいない場合は、どこで使用する必要がありますか? .dll(など)を作成しようと考えています.soが、別の種類のバイナリを作成すると答えは変わりますか? ユーザーがヘッダーとソースをプロジェクトにコピーし、プロジェクトをビルドするたびにライブラリ全体をビルドするとどうなるでしょうか。何が変わるでしょうか?

補足: 3 番目のオプションは、関数によって返されたオブジェクトがスタック上にあるかどうかをパラメータで指定できるようにすることだと思います。ただし、これは非常に複雑に思えますが、ライブラリ/API がそれを行うのを見たことがありません。4 番目のオプションは、既存のオブジェクトへのポインターを許可することです。これは、新しいデータで埋められます。このようにして、ユーザーは希望するオブジェクトの種類を指定できますが、これもやや複雑に見えます。

4

1 に答える 1

2

常に自動メモリ管理を優先します。動的な有効期間が必要な場合にのみ、動的メモリ管理を使用してください。関数の目的が T を返すことである場合、動的な有効期間は必要ありません。

動的な有効期間が必要な場合は、削除する必要があるオブジェクトへの生のポインターを処理しないでください。常にスマート ポインターを使用してください。

また、

ヒープ上にある必要がある場合は、ユーザーがヒープにコピーすることを期待してください

ヒープに移動するということですよね?

于 2013-09-04T02:49:24.113 に答える