현대 C++ 스타일에 관해 들었던 한 가지 경험은 새 포인터를 사용하거나 삭제할 필요가 없으며 대신 스마트 포인터를 사용해야한다는 것입니다. 그래서 내가 멤버 중 하나가 다른 객체에 대한 포인터 인 클래스가있을 때 이것을 수행하는 방법. 스마트 포인터를 사용하면 삭제할 필요가 없지만 새로운 개체를 만들어야합니다. 예 : 아래의 "표준적인"현대 C++ 스타일입니까, 아니면 어떻게해야합니까?"modern C++"에서 클래스 멤버로서의 객체에 대한 포인터
#include
#include
class B {
public:
B() { std::printf("constructing B\n");}
~B() { std::printf("destroying B\n");}
};
class A {
public:
A()
{
std::printf("constructing A\n");
b = std::unique_ptr(new B());
}
~A() { std::printf("destroying A\n");}
private:
std::unique_ptr b;
};
int main()
{
A a;
return 0;
}
나는 Boost가 이것을 가지고 있고, C++ 0x가 비슷한 것을 가지고 있다고 생각하지만, boost :: make_shared을 사용할 수있다. boost :: shared_ptr (new int (9))' –
Dawson
더 이상 말하지 않고 "현대적인 스타일"이라고 말하려고하는 사람들의 말을 듣지 마십시오. 조언은 좋거나 나쁠 수도 있지만, 작성중인 특정 코드에서 귀하와 후임자에게 도움이되는 내용의 맥락에서 직접 평가해야합니다. 그렇지 않으면, 당신은 단지화물 컬트에 참여하고 있습니다. –
나는 당신이 RAII와 관련하여 C++ 프로그램을 설계 할 것을 권고하고 혼란 스럽다고 생각한다. 명시 적 소멸자를 구현할 필요가 없거나 최소화 할 필요가있다. (삭제로 객체를 명시 적으로 할당 해제 할 필요가 거의 없다는 것을 의미한다.) – mloskot