ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 04:02

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 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)


通報する
ページトップ
   
投稿記事Posted: 2006年5月03日(水) 13:29 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> デストラクタを呼ぼうとすると文法エラーになります
>
>
コード:
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演算子を使うべきです。


通報する
ページトップ
投稿記事Posted: 2006年5月03日(水) 13:43 
オフライン

登録日時: 2005年5月31日(火) 17:14
記事: 231
お住まい: 茨城県
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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月03日(水) 18:20 
固定長の配列ならnew、deleteを使えばいいと思うんですけど、
vectorのような可変長の配列を作りたいので、どうしてもデストラクタを呼び出す必要があるんです。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年5月03日(水) 22:59 
オフライン

登録日時: 2005年11月13日(日) 15:25
記事: 25
そういう場合はコンストラクタ、デストラクタを使わずに、
Foo_create,Foo_destroyとか別の関数としておけばいいのでは?

とクラスを使ったことのない人が言ってみる。

_________________
みどるべあ
HP:http://hp.vector.co.jp/authors/VA041827/
Mail:middlebear@gmail.com


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月04日(木) 00:16 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
個人的にはコンストラクタを呼べたのが意外でした。
C++では逆にデストラクタは呼べますが,(メンバ関数呼び出しの構文で)コンストラクタは呼べませんので。

> 7さん
malloc/freeではコンストラクタ・デストラクタが呼ばれないからこそ,
敢えて自分でコンストラクタ・デストラクタを呼ぼうという試みだと思います。

> みどるべあさん
特定のクラス限定であればそれでよいのですが,
どんなクラスにも対応するにはやはりコンストラクタ・デストラクタを呼べるのがよいです。
とは言ってもどんなクラスにも対応する方法が今のABには無いですけどね。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[8人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean