- 主题:智能指针作为参数到底传引用还是直接传有定论没有?
肯定是直接传。哪能多一道弯传引用呢。
unique_ptr用std:move传。
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
--
FROM 183.161.94.*
不敢苟同。你看的书文章里,介绍智能指针,都是传引用复制引用吗?没有吧。
【 在 BigCarrot 的大作中提到: 】
: 如果智能指针是在编译器中实现的,那么有那么一点可能编译器会利用到相关的语义信息做优化
: 但是c++中智能指针不都是用库的形式实现的吗
: 所以只能是谣言了
: ...................
--
FROM 183.161.94.*
我觉得,先要搞清楚什么是传值,传引用。
#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.*