2016-06-23 2 views
1

이 내 "코드"가됩니다에 varible 할당 된 힙 초기화 방법 :생성자

class a{ 
    int *var=new int; 
public: 
    a(int i):*var(5){}; 
    ~a(){} 
}; 

지금의 과정이 작동하지 않습니다. 생성자에서 힙 변수를 초기화하는 방법은 무엇입니까? 그래서 같이

+0

: 특별히 수동으로 메모리를 관리 할 필요가없는 한, 더 나은 디자인과 같은 스마트 포인터를 사용하는 것입니다 (운동 말할) 생성자에게? 처음에는 사용되지 않았고 두 번째로 클래스와 동일하게 사용하는 것은 좋지 않습니다. 그렇다면 왜 생성자 안에 힙 변수를 할당하려고하지 않습니까? – skyking

답변

4

(I 생성자 내부 힙 변수를 할당하고 싶지 않은) :

class a{ 
    int *var; 
public: 
    a(int a):var(new int(5)){}; 
    ~a() 
    { 
     delete var; 
    } 
} 

메모리 할당은 생성자에서 일어날 필요가있다. 또한 소멸자에서 할당을 해제해야합니다.

생성자에 대한 매개 변수 a은 사용되지 않습니다. 이 값을 사용하여 클래스 변수 a을 초기화하려는 경우 할당 호출을 new var(a)으로 변경해야합니다.

참고 2 :이 매개 변수는`A`라고 한 이유는 무엇입니까

class a{ 
    std::unique_ptr<int> var; 
public: 
    a(int a): var(std::make_unique<int>(5)){}; 
    ~a() 
    {} 
} 
+0

고마워요, 그것의 작품 –

+0

@AnatolyS - 그건 정말로 편집이 아닌 주석이어야합니다. – Smeeheey

+0

@Smeeheey : 좋아요.하지만 std :: unique_ptr을 표시하기로 결정한 경우, 기본 설정 방법을 보여줘야합니다. – AnatolyS