Delphi:メソッドのパラメータとして動的に作成されたオブジェクトを解放する方法

もはや

オブジェクトとしてパラメータを持つメソッドがあります(以下の狙撃コード):

TMyObject=class(TObject)
  constructor Create();
  destructor Destroy();override;
end;

implementation

function doSomething(x:TMyObject):integer;
begin
  //code
end;

procedure test();
var
  w:integer;
begin
  w:=doSomething(TMyObject.Create);
  //here: how to free the created object in line above?
end;

どのように呼び出されるメソッドのオブジェクトを作成内部破壊のdoSomethingのこのメソッドの外では?

Dalija Prasnikar

オブジェクトインスタンスを解放するには、を呼び出すことができるオブジェクトインスタンスへの参照が必要ですFree()

オブジェクトインスタンスをパラメータとしてインプレースで作成しているため、参照できるのはdoSomething()パラメータ内の参照だけです

あなたはどちらかをFree内部で行う必要がありますdoSomething()(これは私が行うことをお勧めしない練習です):

function doSomething(x: TMyObject): Integer;
begin
  try
    //code
  finally
    x.Free;
  end;
end;

または、で追加の変数を作成しtest()、に渡してdoSomething()戻り値のFree後にそれを渡す必要がありdoSomething()ます。

procedure test();
var
  w: Integer;
  o: TMyObject
begin
  o := TMyObject.Create;
  try
    w := doSomething(o);
  finally
    o.Free;
  end;
end;

参照カウントオブジェクトを使用すると、オブジェクトをインプレースで作成し、参照カウントでオブジェクトを解放できると思われるかもしれませんが、次のコンパイラの問題により、この種の構造は機能しない場合があります。

コンパイラは、新しく作成されたオブジェクトインスタンスをconstインターフェイスパラメータとして直接渡すときに、非表示の参照を保持する必要があります

これは、元EmbarcaderoコンパイラエンジニアのBarry Kellyによって、StackOverflowの回答で確認されています。

オブジェクトインスタンスをconstインターフェイスパラメータとして直接渡す場合、コンパイラはヒント/警告を表示する必要がありますか?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

動的に作成されたオブジェクトのポインタをシグナルパラメータとしてself(this)に送信する方法

分類Dev

__init__メソッドで作成されたオブジェクトのすべてのパラメーターを出力する方法はありますか?

分類Dev

メソッドの戻り値は、メソッドパラメータとして渡されたオブジェクトを変更しています

分類Dev

作成するオブジェクトをJavaのメソッドのパラメーターとして渡すにはどうすればよいですか?

分類Dev

dlopenを使用して共有オブジェクトのランタイムをロードすることによって作成されたオブジェクトのメソッドを呼び出す方法

分類Dev

メソッドにパラメーターとして渡されないOCMockでオブジェクトをモックする方法は?

分類Dev

Java:ArrayListに格納されているオブジェクトのタイプのArrayとArrayListを作成します(パラメーターとしてメソッドに渡されます)

分類Dev

JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

分類Dev

配列を使用するメソッドのインスタンス化されたオブジェクトをパラメーターに使用する方法

分類Dev

チェックされたラジオボタンのみをパラメータとして渡すメソッド呼び出しを作成します

分類Dev

静的に作成されたオブジェクトのメソッドをオーバーライドする

分類Dev

javascriptメソッドとオブジェクトパラメータを使用してhtmlを生成する方法

分類Dev

メソッドパラメータとして匿名オブジェクトを送信する方法は?

分類Dev

Angularのgetメソッドのパラメーターとしてオブジェクトを使用する

分類Dev

Javascriptでオブジェクトのメソッドをパラメータとして渡す方法

分類Dev

onPauseメソッドのパラメーターとしてonCreateからオブジェクトを取得するメソッドの使用方法

分類Dev

別のクラスのデータメンバーとしてオブジェクトが作成されている場合、パラメーター化されたコンストラクターに値を渡す方法は?

分類Dev

コンストラクター内で別のメソッドを呼び出すことによって作成されたビットマップオブジェクトにプロパティを追加する

分類Dev

C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

分類Dev

新しいメソッドを使用して作成されたオブジェクトをモックする方法

分類Dev

JSONオブジェクトがパラメータとしてwebApiPUTメソッドに渡されない

分類Dev

インターフェースはそれ自身のオブジェクトをDEFAULTとして作成するためにそれ自身のメソッドをオーバーライドすることを実装します

分類Dev

Javaコードを乾燥させる最良の方法は何ですか?パラメータ用に異なるオブジェクトを使用してプライベートメソッドを作成しますか?

分類Dev

Mockito-モックオブジェクトメソッドによって返されたオブジェクトのメソッドをスタブする

分類Dev

クラッシュしたRセッションのbig.matrixオブジェクトによって使用されるメモリを解放する方法

分類Dev

メソッドで渡される別のパラメーターでオブジェクトのパラメーターを取得します-Java

分類Dev

C# - メソッド パラメーターとして渡されるオブジェクトが状態を変更する

分類Dev

「クラスローダーによって作成されたオブジェクトのメソッドとコンストラクターが他のクラスを参照する可能性がある」とはどういう意味ですか?

分類Dev

同期されたメソッドを介してアクセスされるプライベートクラスパラメータは、「同期されたオブジェクト」と見なされますか?

Related 関連記事

  1. 1

    動的に作成されたオブジェクトのポインタをシグナルパラメータとしてself(this)に送信する方法

  2. 2

    __init__メソッドで作成されたオブジェクトのすべてのパラメーターを出力する方法はありますか?

  3. 3

    メソッドの戻り値は、メソッドパラメータとして渡されたオブジェクトを変更しています

  4. 4

    作成するオブジェクトをJavaのメソッドのパラメーターとして渡すにはどうすればよいですか?

  5. 5

    dlopenを使用して共有オブジェクトのランタイムをロードすることによって作成されたオブジェクトのメソッドを呼び出す方法

  6. 6

    メソッドにパラメーターとして渡されないOCMockでオブジェクトをモックする方法は?

  7. 7

    Java:ArrayListに格納されているオブジェクトのタイプのArrayとArrayListを作成します(パラメーターとしてメソッドに渡されます)

  8. 8

    JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

  9. 9

    配列を使用するメソッドのインスタンス化されたオブジェクトをパラメーターに使用する方法

  10. 10

    チェックされたラジオボタンのみをパラメータとして渡すメソッド呼び出しを作成します

  11. 11

    静的に作成されたオブジェクトのメソッドをオーバーライドする

  12. 12

    javascriptメソッドとオブジェクトパラメータを使用してhtmlを生成する方法

  13. 13

    メソッドパラメータとして匿名オブジェクトを送信する方法は?

  14. 14

    Angularのgetメソッドのパラメーターとしてオブジェクトを使用する

  15. 15

    Javascriptでオブジェクトのメソッドをパラメータとして渡す方法

  16. 16

    onPauseメソッドのパラメーターとしてonCreateからオブジェクトを取得するメソッドの使用方法

  17. 17

    別のクラスのデータメンバーとしてオブジェクトが作成されている場合、パラメーター化されたコンストラクターに値を渡す方法は?

  18. 18

    コンストラクター内で別のメソッドを呼び出すことによって作成されたビットマップオブジェクトにプロパティを追加する

  19. 19

    C#ジェネリックスパラメーターとしてオブジェクト型を持たないジェネリックメソッドの引数として渡された型を取得するにはどうすればよいですか?

  20. 20

    新しいメソッドを使用して作成されたオブジェクトをモックする方法

  21. 21

    JSONオブジェクトがパラメータとしてwebApiPUTメソッドに渡されない

  22. 22

    インターフェースはそれ自身のオブジェクトをDEFAULTとして作成するためにそれ自身のメソッドをオーバーライドすることを実装します

  23. 23

    Javaコードを乾燥させる最良の方法は何ですか?パラメータ用に異なるオブジェクトを使用してプライベートメソッドを作成しますか?

  24. 24

    Mockito-モックオブジェクトメソッドによって返されたオブジェクトのメソッドをスタブする

  25. 25

    クラッシュしたRセッションのbig.matrixオブジェクトによって使用されるメモリを解放する方法

  26. 26

    メソッドで渡される別のパラメーターでオブジェクトのパラメーターを取得します-Java

  27. 27

    C# - メソッド パラメーターとして渡されるオブジェクトが状態を変更する

  28. 28

    「クラスローダーによって作成されたオブジェクトのメソッドとコンストラクターが他のクラスを参照する可能性がある」とはどういう意味ですか?

  29. 29

    同期されたメソッドを介してアクセスされるプライベートクラスパラメータは、「同期されたオブジェクト」と見なされますか?

ホットタグ

アーカイブ