以下代码中shared_ptr<Point> sp3(sp1->addPoint(*sp2));执行拷贝构造还是移动构造?#include <memory> #include <iostream> using namespace std; class Point : public std::enable_shared_from_this<Point> { public: Point(int ix = 0, int iy = 0) : _ix(ix) , _iy(iy) { cout << "Point(int,int)" << endl; } ~Point() { cout << "~Point()" << endl; } shared_ptr<Point> addPoint(Point & pt) { _ix += pt._ix; _iy += pt._iy; return shared_from_this(); } private: int _ix; int _iy; }; void test() { shared_ptr<Point> sp1(new Point(1, 2)); shared_ptr<Point> sp2(new Point(11, 12)); shared_ptr<Point> sp3(sp1->addPoint(*sp2)); cout << "sp1.use_count = " << sp1.use_count() << endl; cout << "sp2.use_count = " << sp2.use_count() << endl; cout << "sp3.use_count = " << sp3.use_count() << endl; } int main() { test(); return 0; }
时间: 2024-04-02 14:37:50 浏览: 46
详解C++中shared_ptr的使用教程
在这个代码中,执行的是拷贝构造。因为 addPoint 函数返回的是一个 shared_ptr 智能指针,而不是一个右值引用,所以 sp3 的初始化需要使用拷贝构造函数。拷贝构造函数会增加引用计数,因此 sp1 的引用计数为2。如果 addPoint 函数返回的是一个右值引用,那么就会执行移动构造函数,此时 sp1 的引用计数就是1。
阅读全文