float * p_fees = new float[20];
p_fees 포인터는 이 변수가 선언되어 있는 함수가 종료될 때 사라지므로 메모리의 주소를 전달할 필요(외부 링크)가 있음.
extern float * p_fees;
int *pi = new int (6); // *pi를 6으로 초기화
double * pd = new double (99.99) // *pd를 99.99으로 초기화
struct where {double x; double y; double z;};
where * one = new where {2.5, 5.3, 7.2};
int * ar = new int [4] {2, 4, 6, 7};
int * pin = new int {6}; // *pin을 6d으로 초기화
double * pdo = new double {99.99};
new 가 실패하는 경우 메모리의 양을 확보할수 없을 경우, std::bad_alloc 예외를 반환한다.
new: 연산자, 함수, 대체함수
int * pi = new int;
int * pi = new(sizeof(int));
int * pa = new int[40];
int * pa = new (40 * sizeof(int));
int * psome = new int [10];
delete [] psome;
char animal[20] = "bear";
char *ps;
ps = animal;
ps = new char[strlen(animal) + 1];
strcpy(ps, animal);
int main()
{
char* name; // 포인터를 만들지만 메모리는 대입하지 않는다
name = getname(); // 문자열의 주소를 name에 대입한다
cout << (int *)name << ": " << name << "\n";
delete[] name; // 메모리 해제
name = getname();
cout << (int *)name << ": " << name << "\n";
delete[] name;
return 0;
}
char * getname() // 새 문자열을 가리키는 포인터를 리턴한다
{
char temp[80]; // 임시 배열
cout << "이름을 입력하십시오: ";
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy(pn, temp); // 문자열을 더 작은 공간으로 복사한다
return pn; // 함수가 종료될 때 임시 배열인 temp는 소멸한다
}
일반적으로, new 연산자는 사용자가 요청한 메모리 크기를 충분히 다룰 수 있을 만큼의 메모리 블록을 힙에서 찾는다. 그런데 new 연산자는 사용할 위치를 사용자가 지정할 수 있는 위치 지정 new라는 한 가지 변형이 있다. 프로그래머는 메모리 관리 절차를 설정하거나 특정 주소를 통해 접근하는 하드웨어를 다루고, 특정 메모리 위치에 있는 객체를 생성하는 데에 이 기능을 사용할 수 있다.
위치 지정 new는 각괄호와 함께 또는 각괄호 없이 사용할 수 있다.
#include <new>
struct chaff
{
char dross[20];
int slag;
};
char buffer1[50];
char buffer2[50];
int main()
{
chaff *p1, *p2;
int *p3, *p4;
// new의 일반 형식
p1 = new chaff; // 구조체의 힙에 놓는다
p3 = new int[20]; // int 배열을 힙에 놓는다
// 위치지정 new
p2 = new (buffer1) chaff; // 구조체를 buffer1에 놓는다
p4 = new (buffer2) int[20] // int 배열을 buffer2에 놓는다
}
-> LISTING 09.10 참조