C++ : 클래스 소멸자는 무엇을합니까? 다음과 같이 가정하자C++ : 클래스 소멸자는 무엇을합니까?
우리는 여러 회원 대상 "인 myObject"을 가지고 있고,이 : 내가 읽은 바로는
int a;
float b;
yourClass yourObject;
void hisMethod();
가, 메모리가 "인 myObject"에하는 순서와 같다 할당.
일단 소멸자가 호출되면 어떻게됩니까?
소멸자가 호출 된 후 객체가 파괴되기 전에 내가 읽은 것으로부터 (a) 객체 "myObject"에 액세스 할 수 있습니다. (b) yourObject (c) members hisMethod()
계좌에 대한 아직 액세스 할 수 있습니까? 정의되지 않은 동작입니까?
많은 C++ 서적에서 자세한 내용을 언급하지 않습니다. 자세한 내용은 어디에서 확인할 수 있습니까? 왜냐하면 세부 사항은 "배치 후 새로운 것이 아니라면 수동으로 소멸자를 호출하지 않는 것"과 같은 많은 C++ 규칙을 이해하는 데 도움이 될 수 있기 때문입니다. 나는이 글을 보았 기 때문에
[업데이트 1] 내 질문을 제기 : What does empty destructor do? 포스터는 아래 예제를 제공합니다
#include <iostream>
#include <set>
class a
{
public:
std::set <int> myset;
};
int main()
{
a object;
object.myset.insert(55);
object.~a();
object.myset.insert(20);
std::cout << object.myset.size();
}
포스터 얻을 : "* glibc는 *이 감지 /합니다. app : double free or corruption (fasttop) : "그리고 나서"ABORT ".
이 의미
object.myset.insert(20);
가 소멸자를 수동으로 호출 한 후 존재 여전히 개체를 의미 오류를 발생시키지 않습니다. 해당 클래스 멤버를 계속 호출 할 수 있습니다!
deconstructor를 두 번 호출하면 오류가 발생합니다.
[업데이트 1] QT Creator에서 코드를 실행하고 object.myset.insert (20)를 실행할 때;
이 오류가 발생 : 플래그 =이 0x0, 0x0으로 :
는에서 액세스 위반을 참조하십시오.
dtor를 호출하면 개체 수명이 종료됩니다. 그것으로 아무 것도하지 마십시오. – Deduplicator
* "소멸자가 호출 된 후 객체가 파괴되기 전에"* - 그게 무슨 뜻입니까? 정의에 따라 소멸자는 객체를 파괴합니다. – 5gon12eder
@Deduplicator. 나는 그 규칙을 알았다. 난 그저 기본 메커니즘을 이해하고 싶었어요. – user1914692