以下代码有什么问题? #include <iostream> #include <memory> using namespace std; class Point { public: Point(int ix = 0, int iy = 0): _ix(ix), _iy(iy) { cout << "Point(int,int)" << endl; } shared_ptr<Point> addPoint(Point & pt) { _ix += pt._ix; _iy += pt._iy; return shared_ptr<Point>(this); } ~Point() { cout << "~Point()" << endl; } private: int _ix; int _iy; }; int main() { shared_ptr<Point> sp(new Point(1, 2)); shared_ptr<Point> sp2(new Point(11, 12)); shared_ptr<Point> sp3(sp->addPoint(*sp2)); }
时间: 2023-08-21 20:39:07 浏览: 131
#include_iostream.h_
4星 · 用户满意度95%
这段代码的问题是,`addPoint` 函数返回的是 `shared_ptr<Point>(this)`,这意味着返回的智能指针与函数内部创建的临时智能指针共享同一个对象,因此会导致内存泄漏。因为当 `addPoint` 函数返回时,临时智能指针会被销毁,从而导致指向这个对象的智能指针数量减少,但是由于返回的智能指针也指向这个对象,因此这个对象的引用计数不会减少,从而导致这个对象无法被销毁,造成内存泄漏。正确的做法是返回一个新创建的智能指针,如下所示:
```
shared_ptr<Point> addPoint(Point & pt) {
_ix += pt._ix;
_iy += pt._iy;
return shared_ptr<Point>(new Point(_ix, _iy));
}
```
阅读全文