0

정적 멤버 변수를 새 오브젝트로 정의하고 삭제하지 않는 것이 좋습니까? 예를동적으로 할당 된 정적 멤버 변수의 삭제를 건너 뛰어도 괜찮습니까?

class A 
{ 
    static vector<BaseClass*> p; 
}; 

vector<BaseClass*> A::p = vector<BaseClass*>{new DerivedClassA, ...}; 

를 들어 내가 p는 정적이기 때문에 더 메모리 누수 문제가 없다고 생각, 수명주기 전체 프로그램 이상 프로그램이 종료되면 메모리는 운영 체제에 의해 발표 될 예정이다. 그것의 기억 행동은 다음과 거의 비슷하게 보입니다.

class A 
{ 
    static vector<unique_ptr<BaseClass>> p; 
}; 

vector<unique_ptr<BaseClass>> A::p = ...; 

그러나 나는 옳은지 확실하지 않습니다.

+0

새로운 것을 사용할 필요가 없습니다. 그냥 스택에 int를 넣으십시오. – 4pie0

+0

int를 예제로만 사용합니다. – user1899020

+0

또한 int로만 예를 들면 – 4pie0

답변

4

이 방법의 문제점은 BaseClass 개체가 차지하는 메모리를 통해서도 개체가 OS에 의해 해제되므로 ~BaseClass()이 호출되지 않는다는 것입니다. 이러한 소멸자가 중요한 작업을 수행하면 이로 인해 문제가 발생할 수 있습니다. 그러나 그들이하지 않더라도, 나는 여전히 이것을 추천하지 않을 것이다. 누구나 코드를 읽는다면 어지러운 것처럼 보일 것이며, Visual Studio와 같은 IDE를 사용한다면 시스템 종료시 메모리 누수에 대해 경고 할 수 있습니다. 이런 종류의 일은 당신에게 소리 질러 질 것입니다. 그것이 당신에게 소리를 지르면 그것을 무시하는 데 익숙해 진다면 결국에는 진짜 문제를 놓치게 될 것입니다.