Вы имеете в виду что-то вроде:
boost::shared_ptr<int> myInt(new int(5));
call_some_function(myInt.get());
Это только позволяет функции использовать int*
. Он не должен пытаться удалить его или стать владельцем.
Если вам нужна только необработанная память, используйте vector
:
std::vector<char> memory(blockSize);
call_some_function(&blockSize[0]);
Опять же, память принадлежит 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));