코드 해제 구성 : 생성자 throw 1;
다음
C++ 비 완전히 객체
#include<iostream>
using namespace std;
class A{
public:
A(){cout << "A() Constructor " << endl;
throw 1;
}
};
int main(){
A* p=0;
cout << p << endl; // p value is 0
try{
p=new A(); // object is not fully constructed, no address is returned to p. for future deallocation
}
catch(...){cout << "Exception" << endl;}
cout << p << endl; // this will output that p has the value 0,proof that no address was returned to p.
}
메모리가 힙에있는 객체에 할당 된 메모리의 주소가 생성자 에 전달 되나의 목적을 유형 A
은 완전히 구성된 오브젝트로 간주되지 않습니다. 따라서 포인터는 포인터 p로 리턴됩니다. 내가 뭔가 잘못 이해했다면 나를 바로 잡아라.
질문 :
1) 그래서 내 질문이이 (가) 개체에 대한 메모리 할당을 해제하는 등의 경우에 가능한 방법이다. 임에 대해 말하지 않고 소멸자 호출이지만 메모리 할당 해제.
2)A
main
함수 안에 로컬 객체를 만들면 어떨까요? 그리고 분명히 그것은 완전히 건설되지 않을 것입니다. 이 객체는 언제 할당이 해제됩니다 (완전히 구속 된 하위 객체의 소멸자를 호출 한 후).
p가 null 포인터이고 A 객체가 할당 된 메모리 주소가 A 생성자 내에서 throw 된 예외 때문에이 포인터에 전달되지 않았기 때문에 삭제할 수 없습니다. – AlexDan
올바른 방법 이를 공유 포인터라고합니다. – Florian