ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 02:09

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - デストラクタが呼び出せない
作成者 メッセージ
  記事の件名:   引用付きで返信する
個人的にはコンストラクタを呼べたのが意外でした。
C++では逆にデストラクタは呼べますが,(メンバ関数呼び出しの構文で)コンストラクタは呼べませんので。

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

> みどるべあさん
特定のクラス限定であればそれでよいのですが,
どんなクラスにも対応するにはやはりコンストラクタ・デストラクタを呼べるのがよいです。
とは言ってもどんなクラスにも対応する方法が今のABには無いですけどね。
投稿記事 Posted: 2006年5月04日(木) 00:16
  記事の件名:   引用付きで返信する
そういう場合はコンストラクタ、デストラクタを使わずに、
Foo_create,Foo_destroyとか別の関数としておけばいいのでは?

とクラスを使ったことのない人が言ってみる。
投稿記事 Posted: 2006年5月03日(水) 22:59
  記事の件名:   引用付きで返信する
固定長の配列ならnew、deleteを使えばいいと思うんですけど、
vectorのような可変長の配列を作りたいので、どうしてもデストラクタを呼び出す必要があるんです。
投稿記事 Posted: 2006年5月03日(水) 18:20
  記事の件名:  肝心のデストラクタは・・・  引用付きで返信する
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日(水) 13:43
  記事の件名:  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演算子を使うべきです。
投稿記事 Posted: 2006年5月03日(水) 13:29
  記事の件名:  デストラクタが呼び出せない  引用付きで返信する
デストラクタを呼ぼうとすると文法エラーになります
コード:
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日(水) 03:37

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


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