ab.com コミュニティ https://www.activebasic.com/forum/ |
|
デストラクタが呼び出せない https://www.activebasic.com/forum/viewtopic.php?t=997 |
ページ 1 / 1 |
作成者: | k.kiyo [ 2006年5月03日(水) 03:37 ] |
記事の件名: | デストラクタが呼び出せない |
デストラクタを呼ぼうとすると文法エラーになります コード: class Foo public sub Foo() print "コンストラクタ" endsub sub ~Foo() print "デストラクタ" endsub endclass dim pobj as *Foo dim size=10 as long dim i as long pobj = malloc(sizeof(Foo)*size) for i=0 to ELM(size) pobj.Foo() next for i=0 to ELM(size) pobj.~Foo()'文法が間違っています next free(pobj) |
作成者: | 7 [ 2006年5月03日(水) 13:29 ] |
記事の件名: | Re: デストラクタが呼び出せない |
> デストラクタを呼ぼうとすると文法エラーになります > > コード: class Foo > public > sub Foo() > print "コンストラクタ" > endsub > sub ~Foo() > print "デストラクタ" > endsub > endclass > > dim pobj as *Foo > dim size=10 as long > dim i as long > > pobj = malloc(sizeof(Foo)*size) > for i=0 to ELM(size) > pobj.Foo() > next > > for i=0 to ELM(size) > pobj.~Foo()'文法が間違っています > next > free(pobj) malloc関数ではコンストラクタは実行されませんし、free関数ではデストラクタは実行されません。 New演算子とDelete演算子を使うべきです。 [ここをクリックすると内容が表示されます]
コード: class Foo public sub Foo() print "コンストラクタ" endsub sub ~Foo() print "デストラクタ" endsub endclass dim pobj as *Foo dim size=10 as long dim i as long pobj = new [size] Foo for i=0 to ELM(size) pobj.Foo() next delete pobj |
作成者: | OverTaker [ 2006年5月03日(水) 13:43 ] |
記事の件名: | 肝心のデストラクタは・・・ |
Newを使っても、デストラクタを任意で呼ぼうとすると、なぜか文法エラーになりますね。 普通デストラクタは任意で使わないと思いますが・・・ コード: #console class Foo public sub Foo() print "コンストラクタ" endsub sub ~Foo() print "デストラクタ" endsub endclass dim pobj as *Foo dim size=10 as long dim i as long pobj = new [size] Foo for i=0 to ELM(size) pobj.Foo() next pobj.~Foo() 'デストラクタで文法エラー delete pobj |
作成者: | k.kiyo [ 2006年5月03日(水) 18:20 ] |
記事の件名: | |
固定長の配列ならnew、deleteを使えばいいと思うんですけど、 vectorのような可変長の配列を作りたいので、どうしてもデストラクタを呼び出す必要があるんです。 |
作成者: | みどるべあ [ 2006年5月03日(水) 22:59 ] |
記事の件名: | |
そういう場合はコンストラクタ、デストラクタを使わずに、 Foo_create,Foo_destroyとか別の関数としておけばいいのでは? とクラスを使ったことのない人が言ってみる。 |
作成者: | イグトランス [ 2006年5月04日(木) 00:16 ] |
記事の件名: | |
個人的にはコンストラクタを呼べたのが意外でした。 C++では逆にデストラクタは呼べますが,(メンバ関数呼び出しの構文で)コンストラクタは呼べませんので。 > 7さん malloc/freeではコンストラクタ・デストラクタが呼ばれないからこそ, 敢えて自分でコンストラクタ・デストラクタを呼ぼうという試みだと思います。 > みどるべあさん 特定のクラス限定であればそれでよいのですが, どんなクラスにも対応するにはやはりコンストラクタ・デストラクタを呼べるのがよいです。 とは言ってもどんなクラスにも対応する方法が今のABには無いですけどね。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |