問題タブ [virtual-destructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ベースクラスの仮想デストラクタ アクセス違反
これがすでに尋ねられていたら申し訳ありませんが、デストラクタとアクセス違反を探すのに苦労しました =)
シナリオの C++ 疑似コードを次に示します。
DLL1 内 (/MT でコンパイル)
DLL1にリンクするDLL2で
何が起こっている?私は脳の一部を持っていますか?A のデストラクタを非仮想にすると、すべて正常に動作します。A と B のデストラクタも呼び出されます (A のデストラクタが仮想であるかのように、これは公開されているためですか?)。
私の主な質問ですが、基本クラスのデストラクタが仮想として宣言されているときにアクセス違反が発生するのはなぜですか?
c++ - C++ デストラクタの動作
C++ デストラクタの動作について質問がありましたが、何よりも好奇心からでした。私は次のクラスを持っています:
Base.h
Imp.h
問題は、このコードではすべてが問題なく動作することです。しかし、AImp::MethodA の呼び出しで BImp 仮想のデストラクタを作成すると、クラス BImp のデータ (m_data1 および m_data2) が初期化されていないように見えます。構築時に含まれているデータが正しいことを確認したので、これの背後にある理由は何だろうと思っていました...
乾杯!
編集: param1 は、実際には MethodA の B への参照でした。実際のコードを少しサニタイズしすぎたようです。
Edit2: 2 つの異なるファイルを表示するために、コードを少し再配置しました。このコードがコンパイルされることをテストしました。ごめんなさい!
c++ - 仮想デストラクタ:動的にメモリが割り当てられていない場合に必要ですか?
クラスがメモリを動的に割り当てない場合、仮想デストラクタが必要ですか?
例えば
この場合、Aのデストラクタを仮想としてマークする必要がありますか?
c++ - 仮想デストラクタは継承されますか?
仮想デストラクタを備えた基本クラスがある場合。仮想デストラクタを宣言するための派生クラスもありますか?
具体的な質問:
- 1)と2)は同じですか?2)そのベースのために自動的に仮想化されますか、それとも仮想化を「停止」しますか?
- 派生したデストラクタは、関係がない場合は省略できますか?
- 派生デストラクタを宣言するためのベストプラクティスは何ですか?仮想、非仮想と宣言しますか、それとも可能であれば省略しますか?
c++ - 派生オブジェクトの後に2回呼び出されたベースデストラクタ?
ねえ、なぜこのプログラムの最後にベースデストラクタが2回呼び出されるのですか?
c++ - C++ 仮想デストラクタ
プロトタイプ クラスを作成するときは、デストラクタを次のようにレイアウトします。
ライブラリでクラスをファイナライズするときに、「仮想」を追加できないことに気付きました。これは正常ですか、仮想が考慮されていますか、それとも何か間違っていますか?
例えば; これを実行しようとすると、コンパイラ エラーが発生します。
代わりにこれを行うとうまくいきます:
私の質問はvirtual
、デストラクタの最終コード書き込みに含める必要がないため、デストラクタは依然として仮想デストラクタとして動作しますか (プロトタイプとして仮想であるため)?
c++ - サブクラスのメソッドでも仮想を指定する必要がありますか?
これはおそらく以前にSOで尋ねられたことがありますが、私は同様の質問を見つけることができませんでした。
次のクラス階層について考えてみます。
Daughter1
とDaughter2
クラスに違いはありますか?
virtual
サブクラスのデストラクタ/メソッドを指定する/指定しない場合の結果は何ですか?
c++ - 純粋な抽象基本クラスの仮想記述子
私は持っています
GCCは私が持っていると主張します
理由がわかりません。純粋なインターフェースとは、インターフェースに関するものです(duh)。デストラクタは、インターフェイスの具体的な実装者の内部実装の詳細の一部です。インターフェイスの一部を形成することはありません。私はスライスの問題全体を理解しています(または少なくとも私は理解していると思います)
だから私の質問は-GCCはそれを主張する権利がありますか?もしそうなら、なぜですか?
c++ - boost :: ublasマトリックスには仮想デストラクタが必要ですか?
boost :: ublasマトリックスを使用している場合、仮想デストラクタが必要ですか?
ちなみに、私のクラスはテンプレートクラスです。
c++ - 仮想を使用した破壊の順序
仮想関数を使用しているときの破壊の順序を教えてください。基本クラスから始まり、次に派生クラスですか?