- 主题:智能指针作为参数到底传引用还是直接传有定论没有?
智能指针遵守指针的语义, 当然直接传值啊, 传智能指针的引用, 这是多邪门的搞法.
【 在 speedboy2998 的大作中提到: 】
: 直接传有助于编译器优化这是谣言还是定论?
--
FROM 120.244.224.*
我很不喜欢智能指针。
自己包装了一个相当于 shared_ptr<vector<T>> 的容器类,到处用。
其他的要么避免用指针, 要么裸指针。
自己安排好指针释放,不是太大的问题。
【 在 milksea 的大作中提到: 】
: 不涉及所有权的借用场景应该直接用裸指针,或者对象引用。
: 传智能指针引用的场景…不好想
--
FROM 223.72.91.*
智能指针是管理对象生存期的。至少需要 new 的地方,unique_ptr 应该尽量用,方便移动所有权。shared_ptr 是 unique_ptr 搞不定的无奈之举。
【 在 finlab 的大作中提到: 】
: 我很不喜欢智能指针。
:
: 自己包装了一个相当于 shared_ptr<vector<T>> 的容器类,到处用。
: ...................
--
FROM 114.249.235.*
不喜欢, 我宁愿直接用裸指针。
大多数情况下,谁拥有和管理对象,谁只是临时使用,都是很明白的。
【 在 milksea 的大作中提到: 】
: 智能指针是管理对象生存期的。至少需要 new 的地方,unique_ptr 应该尽量用,方便移动所有权。shared_ptr 是 unique_ptr 搞不定的无奈之举。
--
FROM 223.72.91.*
不用智能指针自己调用delete析构太容易出错了,改用 unique_ptr 是百利而无一害的
【 在 finlab 的大作中提到: 】
: 不喜欢, 我宁愿直接用裸指针。
:
: 大多数情况下,谁拥有和管理对象,谁只是临时使用,都是很明白的。
: ...................
--
修改:milksea FROM 114.254.3.*
FROM 114.254.3.*
嗯, 大项目关键项目需要。
我自己写的小程序,怎么方便省事怎么来。
【 在 milksea 的大作中提到: 】
: 不用智能指针自己调用delete析构太容易出错了,改用 unique_ptr 是百利而无一害的
--
FROM 223.72.68.*
unique_ptr传值就挂了吧?传进去owner就转移了,等函数退出的时候就析构了,调用者啥都没有了。
--
FROM 101.228.96.*
我理解传值的都是不那么在乎性能的场景,图的是便利性,传引用的话如楼上所说又有点偏离本意,所以我觉得这个设计本身又是一种典型的c++鸡肋
--
FROM 221.224.15.*
创传值会调用拷贝构造。拷贝构造涉及到atomic操作,肯定是有不少代价的
比穿引用慢了不知道多少倍了
--
FROM 60.216.34.*
我觉得,先要搞清楚什么是传值,传引用。
#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.*