我想知道C++如何处理由指针在类方法或函数内部创建的“对象”的内存。
例如类Example的方法

void Example::methodExample()
{

  ExampleObject *pointer = new ExampleObject("image.jpg");

}

我应该以某种方式删除它还是将其自动删除?
抱歉,如果我的问题很愚蠢,但我是初学者:P

最佳答案

您有两个选项

如果您使用原始指针(如示例中那样),则必须手动使用delete创建的new对象

如果不这样做,则创建了内存泄漏。

void Example::methodExample()
{
  ExampleObject *pointer = new ExampleObject("image.jpg");

  // Stuff

  delete pointer;
}

或者,您可以使用智能指针,例如boost::scoped_ptr或C++ 11的std::unique_ptr

这些对象在删除后将自动删除其指向的内容。

某些人(例如我)会说这种方法是首选的,因为即使抛出异常且未到达函数结尾,您的ExampleObject也会被正确删除。
void Example::methodExample()
{
  boost::scoped_ptr<ExampleObject> pointer( new ExampleObject("image.jpg") );

  // Stuff

}

09-06 07:30