C++

C++ new

끄적a 2021. 1. 15. 17:43

자바에서는 객체 생성시 new를 사용하여 객체를 생성한다. 

그런데 C++에서는 new를 사용하지 않고도 객체 생성이 가능하다. 

 

new를 사용하지 않을경우 stack영역에 함수가 생성되어 해당 범위 안에서만 사용 가능하며(아래의 경우 TestStack()영역에서만 사용가능) new를 사용할 경우 전역 함수처럼 사용 가능하다. 

(보통 header파일에 *foo를 선언 하고 cpp에서 new하여 객체를 생성하여 사용하는듯 하다)

 

JAVA처럼 GC가 없기때문에 반드시 delete를 해주어야 하며, 메모리 이슈가 심해서 스마트 포인터라는게 나와 그걸 사용하면 된다. 

 

class Foo
{
public:
    void Test()
    {
        cout << "Foo 함수" << endl;
    }
};
 
 
void TestStack()
{
    // Stack
    Foo foo1;
    foo1.Test();
};
 
void TestHeap()
{
    // heap
    Foo *foo2 = new Foo;
    foo2->Test();
    delete foo2;
};

 

C++ 동적 할당에 대해서는 아래 블로그에 정리가 잘되어 있다. 

jhnyang.tistory.com/334

 

[C++ 강좌] 동적할당 new와 delete 사용법, new 특징별 사용 예시, new초기화리스트, new로 2차원배열 동

[C언어, C++언어 포스팅 링크 목차] 안녕하세요 양햄찌 블로그 입니다. 저번 포스팅에서 동적할당(dynamic allocation)이 무엇인가에 대해 간단히 다뤄봤었는데요. ▼동적할당을 언제 사용하는가? https:

jhnyang.tistory.com

 

스마트 포인터는 아래에서 확인

www.tcpschool.com/cpp/cpp_template_smartPointer