파일 IO 라이브러리를 작성했습니다. 하나 개의 기능은 File::read
은 다음과 같습니다 : 그것은 *t
에 count
T를 읽어float 배열에 unique_ptr 사용
template <typename T>
void File::read(T * t, unsigned long count) const
.
이제 클라이언트로 건너 뜁니다. 내가 읽고 싶은 메모리 버퍼를 할당한다. 나는 이것을 작성했는데 효과적이다 :
float * buffer = new float [16];
file->read(buffer, 16);
그러나 이것은 예외는 아니지만 안전하다. 그래서 나는 std::unique_ptr
에 버퍼를 감싸기로 결정했다. 여기 어딘가에서 실수하고 있습니다.
std::unique_ptr<float[]> buffer (new float[16]);
file->read(*buffer , 16);
이 읽기> 파일 -에 다음과 같은 오류가 발생합니다 :
'운영자 *'아무 짝을
내가 생각 (피연산자 유형은 '표준 :: unique_ptr'입니다) 그것은 unique_ptr
을 참조 해제함으로써 float[]
배열의 첫 번째 요소에 대한 포인터를 얻게됩니다. 내 실수는 어디에서 발생하며 수정 사항은 무엇입니까?
나는 이진 파일에서 벡터로 읽는 방법을 모르는 것 (바이트 스트림), 나는 두렵다. 'File :: read' 호출은'count * sizeof (T)'바이트를'T * t'가 가리키는 메모리로 직접 읽어들입니다. 나는 나의 방법에 대한 해결책을 찾고있다. –
오,'std :: array :: data'는 연속적이고 변경 가능한 메모리 블록에 대한 포인터를 반환하므로 읽을 수 있습니다! 그게 효과가있다. 고맙습니다. –
내 (비추천) 스타일로 올바른 방법으로 게시 할 수 있습니까? 학습 목적으로 아는 것이 유용 할 수 있습니다. –