将智能指针与遗留代码原始指针集成

时间:2016-06-09 19:25:18

标签: pointers unique-ptr

我有一种情况,我现有的代码可以使用原始指针,而且我不允许智能指针 - 如果它。但是,我可以在我开发的任何新代码中使用智能指针。

例如。

我有一个现有的功能:

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,然后将其添加到容器中,并在从容器中弹出内存时将其删除吗?

由于

乔伊

1 个答案:

答案 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();
}