2016-06-17 1 views
0

내가 새로운unique_ptr 변환

char* buffer = new char [size]; 
... 
delete[] buffer; 

와 ++ 내 C에서 프로젝트를 메모리를 할당하는 데 사용 * 숯불하고 정말 다음이

unique_ptr<char[]>buffer(new char[size]); 

하지만처럼, 앞으로 이동하고 unique_ptr을 사용하고 싶습니다 나는 첫 번째 인수로 char* 걸리는 istream& get (char* s, streamsize n);을 사용합니다. 어떻게해야합니까? 유형을 형 변환하려했지만 실패했습니다. 또한 포인터 대신 vector<char>을 사용할 수 있다는 것도 알고 있지만 실제로 사용하지는 않습니다. 고맙습니다!

+0

http://stackoverflow.com/questions/16711697/is-there-any-use-for-unique-ptr-with-array – AnatolyS

+1

[소유권 및 원시 포인터를 사용하려면 unique \ _ptr을 (를) 사용하십시오.] (http://stackoverflow.com/questions/12555441/use-unique-ptr-for-ownership-and-raw-pointer-otherwise) –

+5

클래스를 사용하는 방법에 대한 의문이 생길 때, 몇 가지 문서를 참조하는 것이 좋습니다. 그것 [cppreference] (http://en.cppreference.com/w/cpp/memory/unique_ptr/get)와 같은. – Angew

답변

7

클래스 std::unique_ptr에는 기본 포인터에 액세스하기 위해 get()이라는 메서드가 있습니다.

unique_ptr<char[]> buffer(new char[size]); 
... 
myIstream.get(buffer.get(), n); 
1

배열에 대한 전문화는 std::unique_ptr<T[]>입니다. 그의 대답에 Smeehey가 보여준대로 당신의 경우에 그것을 사용하는 방법. 스콧 메이어의 "효과적인 현대 C++"항목 (18) (강조 광산)의 같은

하지만, :

표준의 존재 :: 배열 unique_ptr, 당신 만 지적 관심을해야 표준 때문에 : : array, std :: vector 및 std :: string은 원시 배열보다 사실상 항상 더 나은 데이터 구조 선택입니다.

그래서, 대신 std::unique_ptr와 함께이 길을 해킹의 목적을 위해 만들어진 클래스를 사용합니다.

0

하나의 방법은 unique_ptr 대신 vector을 사용하는 것이지만 unique_ptr을 사용하는 것은 그만한 이점이 있습니다.
또한 이전에 같은 문제가 발생하여 unique_ptr을 사용하여 할당 된 버퍼를 가지고 함수를 읽기 위해 인수로 전달했습니다. 이 문제를 해결할 수있는 유일한 방법은 unique_ptrchar*으로 변환하는 get() 메서드를 사용하는 것입니다. 내가 직면 한 다른 오류를 피하려면 #include <memory>도 가지고 있는지 확인하십시오.

감사합니다.