ということで試してみました。
コード: 全て選択
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
デストラクタでもメンバ変数にアクセスするとアクセス違反になります。
objの構築ですが、デフォルトコンストラクタが呼び出されず、
引数をとるコンストラクタが呼び出されます。
しかも引数の値が不定値です。
あと、バグではないですが、実体オブジェクトを値で渡す場合、
現状ではコンストラクタ呼び出しの後operator=が呼ばれるようになってると思いますが、
コピーコンストラクタを1回呼ぶほうが効率がいいと思います。