왜 scoped_ptr로 boost :: optional을 사용하는 것이 일반적이지 않은 이유는 힙 대신 스택에서 객체를 만들면 더 좋을 것 같습니다. 그러나 나는 이런 식으로 사용 된 적이 한번도 없다. 내 질문에, 부스트 :: poloid를 할 명백한 무능 이외의 scoped_ptr 일종의 옵션으로 사용하는 단점은 무엇입니까?boost :: optional을 더 나은 scoped_ptr로 사용하지 마십시오
답변
하나는 의미론입니다.
내가 기술적 측면에 대해 의견을주고 boost::optional
및 boost::scoped_ptr
세부 사항에 내 기억을 상기 할 필요가 있지만,이 코드를 읽을 사람을 혼동하는 바인딩 포인터 대신에 optional
S를 사용, 유지 보수에 관해서.
boost/std가 다음과 같이 정의한다면 도움이됩니다. value_ptr에 boost :: optional과 동일한 구현이 추가되었습니다. – gast128
다형성 이 인 점은 scoped_ptr
입니다. 그렇지 않으면 스택에 변수를 로컬로 선언하면됩니다.
int main()
{
Class object(52, 25); //sample declaration, with constructor arguments passed
}
EDIT 1 (코멘트에서 추가 정보에 대한 응답) :
boost::scoped_ptr
실제로 거의 만들기, 복사도 boost::scoped_ptr
을 이동할 수 없습니다 주로 때문에 (설명하기위한 목적으로 사용되지 않습니다 당신이 그것을 저장하는 클래스 카피 불가능하고 움직일 수없는 상태). boost::optional
이 그 목적에 적합하다고 보이지만 ...
boost::optional
(즉, 함수에서 반환되지 않음)의 로컬 사용에는 약간의 유의점이 있습니다. 이는 사용자가 원하는대로 스택에 객체를 만들 수 있기 때문에 :
회원이되는 클래스와 독립적으로 생성 및 파기 될 수있는 또 다른 목적이 있습니다. 어쩌면 게으른 초기화 된 객체일까요? – dan
@dan 답을 업데이트했습니다. – milleniumbug
원하는 변수를 선언하는 것이 잘못된 이유는 무엇입니까? boost :: optional? –
나는 같은 생각을 가지고 있었다. 성능의 관점에서 boost :: optional은 scoped_ptr을 이겼습니다. 단지 심각한 단점은 의미론 (또는 'milleniumbug'이 지적한 것처럼 다형성이 없음)입니다. – gast128