우선, 내 동기는 컴퓨터 커널과 같은 C의 효율적인 메모리 관리를 수행하는 것입니다. 그리고 나는 std::unique_ptr
및 std::vector
을 사용하려고, 내 코드는 여기에 연습 p_data
각 할당 된 배열을 인덱싱에 다른 컨테이너 (예 :지도)에 저장 될 수있는 unique_ptr과 적절한 컨테이너를 사용하여 메모리 관리
// my data container
typedef std::unique_ptr<double> my_type;
std::vector<my_type> my_storage;
// when I need some memory for computation kernel
my_storage.push_back(my_type());
my_storage.back.reset(new double[some_length]);
// get pointer to do computational stuff
double *p_data=my_storage.back.get();
아래 공지 사항 같은 도메인 문제에 따라 보이는 그럼에도 불구하고, 내 주요 질문은 여기에
입니다
std::vector
좋은 선택인가?std::list
/set
과 같은 다른 컨테이너는 어떻습니까?할당 방법에 근본적인 문제가 있습니까? 내가 어떤 작업에
p_data
를 사용 후는 지금이 가장 좋은 방법은 여기에 무엇인가, 원시 포인터
p_data
가 가리키는 메모리 청크를 해제하려면, 가정?
, 대신'표준 : shared_ptr'을 사용할 수 있습니다, 그리고 당신은 모든 원시 포인터를 사용하지 않는 : 대신 사용해보십시오. – Mine
'std :: unique_ptr','new double []'을 사용하고,'std :: make_unique'를 선호한다면이 불일치를 피할 수 있습니다. –
Jarod42
@Mine : 이것은 명확하지 않은 문제의 OP 사양에 따라 완전히 자원 낭비 일 수 있습니다. – Jack