ここから本文です

c++ デストラクタについて デストラクタ関数とdeleteの違いが理解できません。 ...

アバター

ID非公開さん

2019/4/1816:16:05

c++ デストラクタについて

デストラクタ関数とdeleteの違いが理解できません。
どちらも、動的に確保したメモリを解放するための関数でしょうか?

閲覧数:
57
回答数:
4

違反報告

ベストアンサーに選ばれた回答

nao********さん

2019/4/1923:38:08

delete は newで確保したメモリ領域を開放する演算子です。

C++ では operator new/operator delete の定義ができます。

配列の場合は
char *p = new char[128];
// pを使って何か処理
delete [] p;

また delete が面倒なときは <memory>ヘッダーの std::unique_ptr(シェアードポインター)/std::shared_ptr(ユニークポインター)を使います。

shared_ptr は、内部で参照カウントが0になった時点でnew したポインタを自動的に解放してくれます。
一方 unique_ptr はカスタムデリータを作ることができます。

Boost C++ ライブラリではshared_ptr、shared_array/scoped_ptr/scoped_array/intrusive_ptr というスマートポインタがあります。

intrusive_ptrは void intrusive_ptr_add_ref関数とvoid intrusive_ptr_releaseという2つの関数を定義して、boost::intrusive_ptr<型名> lp...; というように宣言します。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

yuk********さん

2019/4/1821:02:34

そのふたつは「次元の異なるもの」だから、比べようがない故に「違い」なんて概念は適用できない。

deleteは動的に生成された(=new演算子によって生成された)オブジェクトを破棄する演算子。
デストラクタはオブジェクトが破棄されるとき(そのオブジェクトに割り当てられた領域が解放される前)に呼び出される特殊なメンバ関数。

プロフィール画像

カテゴリマスター

n2q********さん

編集あり2019/4/1818:32:25

「デストラクタ」

インスタンスを破棄します。


独自の方法で破棄したい場合、「デストラクタ」を定義します。



「delete」

ポインタが指すインスタンスを破棄し、デフォルトで「動的に確保したメモリを解放」します。通常、デフォルトのまま使用します。





『どちらも、動的に確保したメモリを解放するための関数でしょうか?』

いいえ。

それは delete だけです。(「関数」ではありませんが)


ただし、インスタンス破棄の具体的な動作として「動的に確保したメモリを解放」が起こることはあります。

k02********さん

2019/4/1816:23:45

プログラムを見ないと、判断できない。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる