POD 유형 및 스택에서 할당되고 초기화되는 방식을 이해하려고합니다. 는 사용자 정의 클래스 객체의 스택 할당
class A {
public:
A();
int x;
};
class B {
public:
int x;
};
int func()
{
A a;
B b;
}
을 감안할 때 나는 그러나 이전에 초기화 한 후 그 B가 할당 말에 수정이 있습니까? 즉, 은 공백이 선언 된 순서대로 b에 대해 할당되지만 b는 초기화 될 때 공백이 할당되고 선언 될 때 초기화 될 때를 의미합니까?
나는 포드에 대한 아주 좋은 FAQ를 읽고 그가 말한 것들 중
What are Aggregates and PODs and how/why are they special?
하나는 여기 집계 : 생성자가 완료되면 비 POD 클래스 형식의 개체 수명이 시작 언제 종료 소멸자가 끝났습니다. POD 클래스의 경우 객체의 저장 공간이 사용되면 수명이 시작되고 해당 저장 공간을 릴리스하거나 다시 사용할 때 수명이 종료됩니다.
그래서 POD가 할당되고 초기화되는 방식과 이것이 비 POD와 다른 의 세부 정보를 이해하려고합니다.
실제로 이것은'A :: A()'에 대한 정의가 없기 때문에 링크하지 않습니다. 그렇게했다면'A'는 사용자 제공 기본 생성자를 가지고 있기 때문에 POD가 아닙니다. –
예, 의사 코드입니다. B는 꼬투리이고 A는 아닙니다. –
아, 맞아. 알았어. 음, 객체가 정의되기 전에 수명이 시작될 수 없습니다. 객체 정의에 "저장 공간이 확보되었습니다"라는 사실이 내재되어 있습니다. 그 전에 메모리가 존재했다는 사실은 중요하지 않습니다. –