나는 문제가 있으며 그 원인을 알고 있다고 확신합니다. 나는 약간의 설명을 원할 뿐이다. 다른 클래스를 포함하는 클래스가 있지만 단순화를 위해 예제를 두 클래스로 제한합니다.C++에서 소멸자와 범위에 대한 설명이 필요합니다.
클래스 A는 클래스 B를 포함합니다. 클래스 A의 생성자에서 B의 생성자를 호출하여 클래스 B를 초기화합니다. 클래스 A의 생성자 끝에서 클래스 B의 소멸자가 호출됩니다. 이는 예상했던 동작이 아닙니다. 다음은 그 예 ...
아의
#include "b.h"
class a {
public:
b classB;
a(int someParam);
};
a.cpp
#include "a.h"
//Class A's constructor
a::a(int someParam) {
//Set class B by calling it's constructor
classB = b(someParam);
//Now class B's destructor gets called when exiting A's constructor...
}
난 당신이 "새로운"사용하지 않고 변수를 선언하는 경우는 현재를 떠날 때, 그것은 파괴됩니다 것을 알고있다 범위. 그러나 저는 항상 변수의 범위에 적용하고 값을 할당하는 범위가 아닌 것으로 생각했습니다. 그 은입니다. 맞습니까? 그렇다면 classB = *new b(someParam);
이 거기에 아무런 문제가없는 것입니까? 아니면 그냥 대신 포인터를 사용해야합니까? 이 라인
좋은 C++ 프로그래밍 안내서를 읽으십시오. 'classB = * new b (someParam);'는'new b '에 의해 생성 된 객체를 복사하고 있기 때문에 (메모리 누수가 생기기 때문에). –
@BasileStarynkevitch 알겠습니다. 감사합니다 –