掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TStringsとTStringListの扱いについて (ID:17466)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>SetPrinters := TStringList.Create; は、空箱が出来上がり、 >SetPrinters := Printers.Printer.Printers; は、すでに値が入ってる箱が出来上がる。 ちょっと違いますね。 SetPrinters := TStringList.Create; は、新規に作成したTStringListの実体の場所(アドレス)をSetPrintersに記憶しておく。 SetPrinters := Printers.Printer.Printers; は、すでに存在するTStringsの実体の場所をSetPrintersに記憶しておく。 です。違いがわかるでしょうか? > 6:でPrintersのTStringsを代入すると 5:で代入したのが消えてしまう というのは5:で作成したTStringListのアドレスを記憶しているのに6:で新たにアドレスを上書きしてしまうので5:でのアドレスが失われてしまうということで 5:で作成したTStringListの実体が消えてしまうことではありません。メモリに残ったままになっています。 > 8:でのFreeは 5:で作成したもののFreeではなくPrinters.Print.PrintersのFreeとなる(よって終了時にエラーとなる) これは6:でSetPrinters := Printers.Printer.Printers;とコピー(Assign)ではなく代入しているので 8:の SetPrinters.Freeは Printers.Printer.Printersを Freeすることになり終了時に TPrinterが実体のなくなっている Printersを処理しようとしてエラーとなるものです。 この場合6:でSetPrinters.Assign(Printers.Printer.Printers); とコピーをするのなら 8:でのFreeは 5:で作成した TStringListをFreeすることになり問題はありません。 >しかし、オロロさんの仰ってた >> TStringList に中身があって >> TStrings には中身がないってこと はTStringsはanoneさんのおっしゃている「抽象クラス」ですよという意味です。 「抽象クラス」は検索して調べてみてください。 例えば http://www.borland.co.jp/tips/delphi/dh014/
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.