У меня есть ситуация, когда у меня есть существующий код, который работает с необработанными указателями, и мне не разрешено использовать smart-pointer-ify. Тем не менее, мне разрешено использовать интеллектуальные указатели в любом новом коде, который я разрабатываю.Интеграция интеллектуальных указателей с устаревшим кодом raw pointers
Например.
У меня есть существующие функции, как:
void processContent()
{
ContentObject * myContent = new ContentObject();
newFunction(myContent);
}
void newFunction(ContentObject * content)
{
// myVector is just a std::vector<ContentObject*>, defined elsewhere
myVector.push_back(content);
}
void doSomethingWithContent()
{
// There is some logic here, but ultimately based on this logic I want to remove entries, and free the memory they point to.
myVector.pop_back();
}
У меня есть контроль над содержанием "newFunction" и "doSomethingWithContent". Но аргумент, переданный в newFunction, фиксирован. Очевидно, я мог вручную удалить указатель в myVetor, прежде чем появляться, но я подумал, могу ли я реализовать интеллектуальные указатели здесь, чтобы это произошло «автоматически» для меня?
Могу ли я взять необработанный указатель, переданный в функцию, и превратить его в unique_ptr, а затем добавить его в контейнер и удалить его, когда он выскочил из контейнера?
Благодаря
Joey