FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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モードならエラー終了

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

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

コメントの投稿

非公開コメント

カレンダー
07 | 2018/08 | 09
- - - 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カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。