저는 C++을 배우기 시작할 것입니다. 그리고 이것은 메모리 누출이나 일종의 부두 마술이라는 것을 이해하지 못합니까?!삭제 된 객체에 정적 함수를 호출하십시오.
나는 (단지 데모) 일부 "싱글"클래스가 있습니다
Create S
S::S
S::a
S::~S
S::a
그래서 내 질문은
: 왜 소멸자 호출 후에 나는 여전히 작동 한 이들의#include <iostream>
using namespace std;
class S {
private: S() {
cout << "S::S" << endl;
}
public: static S* instance() {
static S* i;
if(i == NULL) {
cout << "Create S" << endl;
i = new S;
}
return i;
}
public: virtual ~S() {
cout << "S::~S" << endl;
}
public: void a() {
cout << "S::a" << endl;
}
};
int main() {
// call some method
S::instance()->a();
// delete pointer to instance (no reason, because I'm curious)
delete S::instance();
// call method again
S::instance()->a();
return 0;
}
출력이를 정적 변수에서 클래스 S의 복사본?
업데이트 : 답변 해 주셔서 감사합니다. 나는 내 실수를 깨닫는다. 제발 저를 용서해주십시오.
당신은 작업 복사본이없는, 당신은 BTW (.. A * 매달려 * 포인터가 정말 정의되지 않은 동작을 유발하는 메소드 * this is java .. – Nim
(btw - 다운 유권자에게 - 초급자에게 투표하기가 다소 힘든 이유 - 특별히 이유가 없다!) – Nim
'메모리 누출인지 또는 어떤 종류인지 이해하지 못합니다. of voodoo magic'결론은 C + +에서 대부분의 다른 언어와 달리 "나쁜 일"을한다고해서 코드가 충돌하고, 스택 추적을 얻으며, "당신이 나쁜 짓을 한 것"이라는 메시지 상자가 나타납니다. 등등. 그래서 당신이 얻고있는 해답은 귀하의 질문에 적용 할 수 있지만 오류없이 컴파일 할 수있는 "열매가 많은"C++ 코드가 있지만 괜찮습니다. – PaulMcKenzie