![]() |
![]() |
TOP > C++ > new演算子 |
![]() |
![]() |
new演算子
C++には、動的確保の演算子としてnew演算子が用意されている。
new演算子は、動的確保とコンストラクタの呼び出し(初期化)を行う。
Cの関数mallocは動的確保ができるが、コンストラクタの呼び出しは行われない。
newとmallocの例
#include <iostream> using namespace std; class CTest { public: CTest() { cout << "Constructor " << endl; } }; int main(int argc, char* argv[]) { CTest *test1 = new CTest(); CTest *test2 = (CTest*)malloc(sizeof(CTest)); delete test1; free(test2); return(0); } 上記の例を実行すると"Constructor"は、一回しか呼ばれない事がわかる。
(書式) new type;
int型などの場合は、動的確保する時に、初期化をする事もできる。
(書式) new type(初期化値);
newの例
#include <iostream> using namespace std; int main(int argc, char* argv[]) { /// 動的確保を行う int *test1 = new int; /// 動的確保をし、1に初期化する int *test2 = new int(1); cout << *test2 << endl; delete test1; delete test2; return(0); } 配列の確保
配列を確保するには、以下の書式を使う。
(書式) new type[size];
newで配列確保の例
#include <iostream> using namespace std; int main(int argc, char* argv[]) { /// int型10個を動的確保 int *test1 = new int[10]; int i; for ( i = 0; i < 10; i++) { test1[i] = i; } delete[] i; return(0); } newを使ってコンストラクタをもう一度呼び出す
new演算子を使って、コンストラクタをもう一度呼び出す事ができる。
(書式) new (void*)address type;
new使い方の例
#include <iostream> using namespace std; class CTest{ public: CTest() : m_a(0) { cout << "Default Constructor : m_a = " << m_a << endl; } CTest(int a) : m_a(a) { cout << "OverLoad Constructor : m_a = " << m_a << endl; } int getParam(void){ return(m_a); } private: int m_a; }; int main(int argc, char* argv[]) { CTest *p = new CTest(); /// 同じオブジェクトに対して、引数ありのコンストラクタを呼び出す CTest *q = new ((void*)p) CTest(3); cout << "pointer p->m_a" << p->getParam() << endl; cout << "pointer q->m_a" << q->getParam() << endl; delete p; return(0); } |
![]() |
![]() |
Copyright 2007 ためになるホームページ All Rights Reserved. |