에 메모리를 할당하지 않고 나는 어떤 의미가 없습니다표준은 :: <T> unique_ptr 힙
std::unique_ptr<Thing> m_thing;
m_thing->DoStuff();
대신
std::unique_ptr<Thing> m_thing(new Thing);
m_thing->DoStuff();
첫 번째 예제 컴파일 및 실행, 같은 실수로 문을 썼다 왜냐하면 m_thing이 어떤 객체를 가리키고 있지 않기 때문입니다. 여기 약간 더 큰 코드 예제.
#include <iostream>
#include <memory>
class Thing
{
public:
~Thing(){ std::cout << "destructor of class Thing\n"; }
void DoStuff(){ std::cout << "doing stuff\n"; }
};
void Foo()
{
std::unique_ptr<Thing> m_thing;
m_thing->DoStuff(); //why does this work, since i suppose m_thing to be empty?
}
int main()
{
Foo();
std::cout << "after Foo()\n";
std::cin.get();
return 0;
}
왜 "빈"m_thing unique_ptr이 DoStuff() - 방법 클래스를 호출 할 수 있습니까? 그래서,
std::unique_ptr<Thing> m_thing;
대신 내가 구글을 통해이 동작의 설명을 발견하지 않았다
std::unique_ptr<Thing> m_thing(new Thing);
와 을 m_thing 선언 할 때 것-클래스의 소멸자가 호출되지 도착 결코 또한 발견 누군가 커튼 뒤로 무슨 일이 일어 났는지 설명해 줄 수 있기를 바랍니다.