2015年2月19日のブックマーク (2件)

  • FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ

    Q1: デストラクタにvirtualをつけろとよく言われるけど、なんで? 挙動が未定義のdeleteを呼び出す可能性があるから Q2: 挙動が未定義だと駄目なの? 超駄目。何が起きても文句は言えない Q3: どんな時に挙動が未定義のdeleteが呼び出されるの? こんなとき // NoVirtualBaseClass : デストラクタにvirtualを持たない // NoVirtualSuperClass : NoVirtualBaseClassを継承 NoVirtualBaseClass * ptr = new NoVirtualSuperClass(); // 挙動が未定義 delete ptr; Q4: 何でそうなるの? delete時点で、ptrは自分がNoVirtualBaseClassのインスタンスだと思ってるから Q5: 何で?NoVirtualSuperClassでnewし

    FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ
    fenrir-naru
    fenrir-naru 2015/02/19
    virtual destructorたまに忘れる
  • Symbol#to_proc (Ruby 3.3 リファレンスマニュアル)

    to_proc -> Proc[permalink][rdoc][edit] self に対応する Proc オブジェクトを返します。 生成される Proc オブジェクトを呼びだす(Proc#call)と、 Proc#callの第一引数をレシーバとして、 self という名前のメソッドを残りの引数を渡して呼びだします。 生成される Proc オブジェクトは lambda です。 :object_id.to_proc.lambda? # => true 明示的に呼ぶ例 :to_i.to_proc["ff", 16] # => 255 ← "ff".to_i(16)と同じ 暗黙に呼ばれる例 # メソッドに & とともにシンボルを渡すと # to_proc が呼ばれて Proc 化され、 # それがブロックとして渡される。 (1..3).collect(&:to_s) # => ["1", "2

    fenrir-naru
    fenrir-naru 2015/02/19
    to_procとかsend便利 evalをわざわざ使う必要なし