2011-10-09 4 views
0

클래스에서 정적 private 멤버를 선언하고 생성자에서 증분하는 것 외에도 내 객체가 살아 있는지 알 수있는 방법이 있나요? 소멸자에서 감소시킵니다. 미리 감사드립니다.내 개체가 C++에서 살아 있는지 어떻게 알 수 있습니까?

+1

"살아 있니?" 나는 이것에 대한 대답은 "발신자가 발신자가 그것을 제어하고 있기 때문에 그것이 살아 있는지를 안다."와 같은 것이라고 생각한다. 그것이 살아 있는지 어떻게 알 수 있습니까? 어떤 목적으로이 것에 대해 묻고 있습니까? – tenfour

+1

개체가 파괴 된 경우 개체의 메서드가 전혀 실행되지 않아야합니다. 메서드가 파기 된 후에 호출되면 프로그램에서 어딘가에 오류가 발생합니다. 개체가 살아 있거나 존재하지 않습니다. –

+0

너무 나쁨 "아니요" 적절한 대답이 될만큼 문자가 충분하지 않습니다. –

답변

1

shared_ptr/weak_ptr을 사용하여 STL을 사용하여 클래스에 간섭을주지 않을 수도 있습니다. 문제의 코드가 아닌 정적 메서드 내부에 살고있는 경우

stl::shared_ptr<YourClass> p = stl::make_shared(...); // holds a strong reference to your type 
stl::weak_ptr<YourClass> wp(p); 

cout << wp.use_count(); // "1" 

p.reset(); 

cout << wp.use_count(); // "0" 
0

하나 이상의 클래스 인스턴스가 인스턴스화되었는지 알고 싶습니까? 정적 카운터는 꽤 좋은 방법입니다. 그것은 어떻게 내가 어쨌든 그것을 할 것입니다. :)

+0

죄송합니다, 나는 어떤 식 으로든 생성자와 소멸자를 수정할 수 없다고 진술해야합니다. – arai

-1

은, 당신의 목적은 정의에 의해 "살아"입니다 -만큼 당신이 방법 내부에서 삭제와 같은 정통 일을하지 않는 한. 당신 있습니다가 (당신이 정말 당신이 무슨 일을하는지 알지 못한다면 권장되지 않는) 그 일을하는 경우

, 다음 포인터입니다 NULL 직후 항상 여부를 확인하기 위해 NULL에 대해 this을 비교할 있는지 확인하십시오 당신의 사물은 "살아있다".

+1

누군가가 삭제 한 경우 개체가 살아 있는지 여부를 확인할 수있는 방법에 대한 대답이 없습니다. –

+0

그리고 자신의 대답도 불완전하고 원래 클래스를 수정할 수 없다면 작동하지 않을 수 있습니다. 그러나 특정 상황에서 유용하기 때문에 다운 vote하지 않았습니다. – Spire

+0

나는 그가 원래의 클래스를 지정할 수 있다고 믿는다. 그렇지 않다면 질문이 합리적이지 않을 것이다. –

관련 문제