我有一种情况,我现有的代码可以使用原始指针,而且我不允许智能指针 - 如果它。但是,我可以在我开发的任何新代码中使用智能指针。
例如。
我有一个现有的功能:
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();
}
我可以控制&#34; newFunction&#34;的内容。和&#34; doSomethingWithContent&#34;。但是传递给newFunction的论点是固定的。显然我可以手动删除myVetor中的指针,然后弹出它,但我想知道我是否可以在这里实现智能指针,以便它自动发生&#34;自动&#34;对我来说?
我可以将原始指针传递给函数,并将其转换为unique_ptr,然后将其添加到容器中,并在从容器中弹出内存时将其删除吗?
由于
乔伊
答案 0 :(得分:1)
假设您可以将myVector定义如下:
std::vector<std::shared_ptr<ContentObject>> myVector;
在这种情况下,您可以在代码中打开智能指针,myVector将按预期保留所有对象:
void newFunction(ContentObject * content)
{
myVector.push_back(std::shared_ptr<ContentObject>(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();
}