如果我有一个类A
并且某些主体使用我的代码创建一个对象,然后在没有周围的情况下A
调用,内存会泄漏吗?在 valgrind 的报告中可能丢失并且仍然可以访问是否表明内存泄漏?如果没有,如何避免它们?更何况,构造函数也不安全吧?我必须在这里使用智能指针替换原始指针吗?还有一种叫做“复制和交换”的策略,什么时候使用它?由于 operator new 可能会抛出异常,所以当我想在堆上动态分配内存时,我有点困惑。DoSth()
try-catch
A
Animal*
代码
class A
{
public:
A(const string& petname, int petage)
:pet_(new Animal(petname, petage))
{
}
~A()
{
delete pet_;
}
void DoSth()
{
// do sth...
throw;
}
private:
Animal* pet_;
};
int main(int argc, char const *argv[])
{
A a("Kitty", 3);
a.DoSth();
return 0;
}
Valgrind 报告
==2799== LEAK SUMMARY:
==2799== definitely lost: 0 bytes in 0 blocks
==2799== indirectly lost: 0 bytes in 0 blocks
==2799== possibly lost: 30 bytes in 1 blocks
==2799== still reachable: 16 bytes in 1 blocks
==2799== suppressed: 0 bytes in 0 blocks