FC2ブログ

C++ の delete と delete[] の違い

C++ の delete と delete[] の違いについて、どうもデストラクタの呼ばれ方が違うらしいです。


たとえば、

#include "stdafx.h"

#include <iostream>
#include <stdio.h>
using namespace std;


class ClassA
{
public:
  ClassA(void)
  {
    cout << "ClassA::constructor" << endl;
  }

  ~ClassA(void)
  {
    cout << "ClassA::destructor" << endl;
  }
};


int main(int argc, char* argv[])
{
  ClassA* ary = new ClassA[3];

  delete ary;

  getchar();
  return 0;
}



これを実行すると


constructor
constructor
constructor
destructor


とこのように、デストラクタが先頭要素にのみしか実行されません。

ただし、デストラクタは呼ばれませんが、バッファ自体は開放されているみたいです。


また、これらの挙動はコンパイラによっても違うようでVisualStudioの場合、

  • VC2005 -> Debugモードならassert、Releaseモードなら無警告

  • VC2012 -> Debugモードならassert、Releaseモードならエラー終了

となるようです。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター