我觉得,先要搞清楚什么是传值,传引用。
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass Constructor" << std::endl;
}
~MyClass() {
std::cout << "MyClass Destructor" << std::endl;
}
void Display() {
std::cout << "Display function in MyClass" << std::endl;
}
};
int main() {
// 创建一个 unique_ptr 指向 MyClass 对象
std::unique_ptr<MyClass> ptr1 = std::make_unique<MyClass>();
// 使用 unique_ptr 调用对象的方法
ptr1->Display();
// unique_ptr 在离开作用域时会自动销毁对象
// 无需手动删除
// 转移所有权
std::unique_ptr<MyClass> ptr2 = std::move(ptr1);
if (!ptr1) {
std::cout << "ptr1 is now null." << std::endl;
}
if (ptr2) {
std::cout << "ptr2 is now owning the object." << std::endl;
ptr2->Display();
}
// ptr2 离开作用域时,MyClass 对象会被自动销毁
return 0;
}
直接用ptr2 = ptr1 是传值,会出现编译错误。用std:move传,是正确的用法,这难道不是传值而是传引用吗?
【 在 Madlee 的大作中提到: 】
: unique_ptr传值就挂了吧?传进去owner就转移了,等函数退出的时候就析构了,调用者啥都没有了。
--
修改:zhangxp024 FROM 223.215.88.*
FROM 223.215.88.*