ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 23:19

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




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年9月06日(水) 21:15 
Ver5cp2で「実体オブジェクトを値参照パラメータとして引き渡せるようになりました」
ということで試してみました。
コード:
class Foo
public
    sub prt()
        print "prt";m_n
    end sub

    sub operator =(byref f as Foo)
        m_n = f.m_n
        print "operator=";m_n
    end sub

	sub Foo(byref f as Foo)
        m_n = f.m_n
        print "copy Foo";m_n
	end sub

	sub Foo()
        m_n = -1
        print "default Foo";m_n
	end sub

	sub Foo(n as long)
        m_n = n
        print "arg Foo";m_n
	end sub

	sub ~Foo()
'        print "~Foo";m_n 'アクセス違反
	end sub

    m_n as long
end class

sub test(obj as Foo)
'    obj.prt() 'アクセス違反
endsub

dim f as Foo(10)
test(f)

結果:
arg Foo 10
arg Foo 3941088
operator= 10
test関数の実引数objがメンバ変数にアクセスするとアクセス違反になります。
デストラクタでもメンバ変数にアクセスするとアクセス違反になります。
objの構築ですが、デフォルトコンストラクタが呼び出されず、
引数をとるコンストラクタが呼び出されます。
しかも引数の値が不定値です。
あと、バグではないですが、実体オブジェクトを値で渡す場合、
現状ではコンストラクタ呼び出しの後operator=が呼ばれるようになってると思いますが、
コピーコンストラクタを1回呼ぶほうが効率がいいと思います。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年9月07日(木) 14:11 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
ご報告ありがとうございます。コンストラクタのオーバーロードが正常に解決できない問題、こちらでも確認できましたので次回のバージョンアップで修正させていただきます。

実体オブジェクトの値参照パラメータ引渡し時のコピーコンストラクタ呼び出しについてですが、こちらも次回のバージョンで対応しようと思います。引渡し時の動作ケースの優先度としては下記のような順位を考えています(上のほうを優先)。

1. コピーコンストラクタを呼び出す
2. 一般コンストラクタ(引数なし)を呼び出し、オーバーロードされた=演算子を呼び出す
3. 実体オブジェクトをダイレクトコピー(構造体は常にコレ)


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

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


オンラインデータ

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


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

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