꽤 많이 있습니다. 메모리를 할당하고 void *를 사용하는 함수에 전달해야합니다. shared_ptr을 사용하고 싶습니다만 어떻게 해야할지 모르겠습니다.공백을 차지하는 함수에 전달할 shared_ptr을 만드는 방법은 무엇입니까?
boost::shared_ptr<int> myInt(new int(5));
call_some_function(myInt.get());
이 만하자 함수가 int*
를 사용
꽤 많이 있습니다. 메모리를 할당하고 void *를 사용하는 함수에 전달해야합니다. shared_ptr을 사용하고 싶습니다만 어떻게 해야할지 모르겠습니다.공백을 차지하는 함수에 전달할 shared_ptr을 만드는 방법은 무엇입니까?
boost::shared_ptr<int> myInt(new int(5));
call_some_function(myInt.get());
이 만하자 함수가 int*
를 사용
당신은 같은 것을 의미합니까. 삭제하거나 소유권을 가져 가려고해서는 안됩니다.
std::vector<char> memory(blockSize);
call_some_function(&blockSize[0]);
가 다시 메모리가 vector
에 속하는 :
그냥 원시 메모리하려는 경우
는vector
사용합니다. 함수
가 소유권을 원하는 경우 당신이 그것을 관리되지 않기 때문에
, 무언가로 포장 할 필요가 없다 :
call_some_function(new int);
call_some_function(new char[blockSize]);
이 기능으로 해제됩니다 확인
delete
/
delete[]
으로 전화하십시오. 하지 (예를 들어,이
free()
를 사용하고자하는) 경우, 대신
malloc
를 사용해야합니다 : 당신은 또한 참조 카운트 메모리 덩어리 컨테이너로 표준 : : 문자열을 사용할 수
template <typename T>
T* malloc_new(void)
{
void* memory = std::malloc(sizeof(T));
if (!memory)
throw std::bad_alloc();
try
{
return new (memory) T();
}
catch(...)
{
std::free(memory);
throw;
}
}
call_some_function(malloc_new<int>());
call_some_function(malloc(blockSize));
+1, 정말 좋은 답변입니다. 'new int (5)'가 호출 될 때'foo (bar(), new int (5))'가 누출 될 수 있습니다. 'bar()'와'bar()'가 예외를 던지기 전에 실행된다. 똑똑한 포인터를 사용하는 것이 더 안전합니다. (std :: auto_ptr
이 함수는 인수로 무엇을합니까? 또한, 메모리를 char 배열로 할당하는 것이 가능할 것이라고 생각합니다 (예 :'std :: vector'로, 함수에 & vec [0]을 전달하십시오). –
UncleBens
이 함수는 google :: protobuf를 메모리에 직렬화합니다. 헤더가 앞에 추가되고 블록이 와이어를 통해 전송됩니다. – shaz