我想知道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
}