当前位置: 首页 > wzjs >正文

wordpress十佳主题谷歌seo推广服务

wordpress十佳主题,谷歌seo推广服务,南宁专业做网站方案,万网没备案怎么做网站一、进阶 1、智能指针相互间赋值 1.1 unique_ptr 之间的赋值 左值不能直接赋值&#xff1a;unique_ptr 表示独占所有权&#xff0c;禁止普通左值之间的赋值&#xff0c;避免多个指针指向同一对象。 unique_ptr<int> a make_unique<int>(5); unique_ptr<i…

一、进阶

1、智能指针相互间赋值

1.1 unique_ptr 之间的赋值

左值不能直接赋值unique_ptr 表示独占所有权,禁止普通左值之间的赋值,避免多个指针指向同一对象。

unique_ptr<int> a = make_unique<int>(5);  
unique_ptr<int> b;  
b = a; // 编译错误,a 是左值,直接赋值违反独占原则  

右值可通过移动赋值:若为右值(如临时对象或通过 std::move 转换),则可移动赋值。此时原 unique_ptr 失去所有权(变为 nullptr) 

unique_ptr<int> a = make_unique<int>(5);  
unique_ptr<int> b = std::move(a); // 合法,a 变为 nullptr,b 接管对象 
1.2 unique_ptrshared_ptr 的赋值 

unique_ptr 右值可赋值给 shared_ptrshared_ptr 有显式构造函数,可接收 unique_ptr 右值(如临时对象或 std::move 转换后的对象)。此时 shared_ptr 接管对象所有权:

unique_ptr<int> uptr = make_unique<int>(10);  
shared_ptr<int> sptr1 = std::move(uptr); // 合法,uptr 变为 nullptr  shared_ptr<int> sptr2(make_unique<int>(20)); // 合法,临时 unique_ptr 作为右值  
shared_ptr<int> sptr3 = make_unique<int>(42); // 隐式移动构造。在构造shared_ptr时传入unique_ptr的右值(如函数返回值),编译器会自动完成移动操作

unique_ptr 左值不可直接赋值给 shared_ptr:若直接用 unique_ptr 左值初始化 shared_ptr,会编译错误 

unique_ptr<int> uptr = make_unique<int>(10);  
shared_ptr<int> sptr3(uptr); // 编译错误,uptr 是左值  
1.3 总结
  • 允许转换的方向unique_ptr → shared_ptr(通过移动语义)。
  • 禁止转换的方向shared_ptr → unique_ptr
  • unique_ptr 之间仅允许右值移动赋值;unique_ptr 可通过右值(如 std::move 或临时对象)赋值给 shared_ptr,但左值不行。 

2、  shared_ptr<int*>有什么问题?

// 正确用法:shared_ptr<int> 管理 int 对象  
shared_ptr<int> sp1 = make_shared<int>(10); // 直接管理 int 值 10  // 非常规用法:shared_ptr<int*> 管理 int* 指针
// 管理 int*,需确保 int* 指向的内存正确释放(此处虽合法但不推荐)    
shared_ptr<int*> sp2 = make_shared<int*>(new int(20)); 

shared_ptr<int>:直接管理一个 int 类型的对象,智能指针内部存储的是 int 对象的指针(如 int*),并负责该 int 对象的内存释放。符合智能指针的设计初衷,直接管理对象内存。

shared_ptr<int*>:管理一个 int* 类型的指针(即指针本身成为智能指针管理的对象)。这种用法违背了智能指针简化对象管理的原则,因为 int* 指向的对象仍需确保其生命周期正确(虽然此处 int* 由 new int 分配,delete 合法,但代码逻辑易混淆)。

std::shared_ptr<int*> sptr(new int*(new int(42)), [](int** p) { delete *p;  // 释放内层 int 对象delete p;    // 释放外层 int* 指针}
);

需在自定义删除器中显式释放内层内存。


使用 shared_ptr<T[]>(C++17 及以上)

int main() {// 创建 shared_ptr 管理动态数组(C++17 起支持)std::shared_ptr<int[]> arr(new int[5]{1, 2, 3, 4, 5});// 直接通过 operator[] 访问元素for (int i = 0; i < 5; ++i) {arr[i] = i * 10;        // 修改元素std::cout << arr[i] << " ";  // 输出:0 10 20 30 40}// 无需手动释放,shared_ptr 自动调用 delete[]return 0;
}

自定义删除器(兼容 C++11/14) 

int main() {// 定义删除器(Lambda 表达式)auto array_deleter = [](int* ptr) {delete[] ptr;  // 必须显式调用 delete[]std::cout << "动态数组内存已释放\n";};// 创建 shared_ptr 并传入删除器std::shared_ptr<int> arr(new int[5]{1, 2, 3, 4, 5}, array_deleter);// 通过 get() 获取原始指针访问元素int* raw_ptr = arr.get();for (int i = 0; i < 5; ++i) {raw_ptr[i] = i * 10;       // 修改元素std::cout << raw_ptr[i] << " ";  // 输出:0 10 20 30 40}// 析构时自动调用 array_deleterreturn 0;
}

http://www.dtcms.com/wzjs/3308.html

相关文章:

  • 美工工资一般多少贵阳关键词优化平台
  • 母婴用品网站建设百度网盘手机app下载安装
  • wordpress 收费查看洛阳seo网络推广
  • 怎么在ps里做网站设计企业网站运营推广
  • 对网站做数据统计的目的是什么百度极速版免费下载安装
  • 长春企业网站建设深圳债务优化公司
  • 搭建高端网站搜索引擎推广方案
  • 新疆推广公司seo 什么意思
  • 网站安全怎么做国内seo公司哪家最好
  • 网站设计公司南京看广告收益最高的软件
  • 电子商务网站建设答辩记录广州网络优化最早的公司
  • 建材企业网站推广自己建个网站要多少钱
  • 网站seo诊断优化分析该怎么做谷歌google官网入口
  • 买网站服务器网络推广seo怎么弄
  • 最好看的政府网站手机上怎么制作网页
  • 网套加工机器设备徐州seo代理计费
  • 如何做收费影视资源网站南昌seo全网营销
  • thinkphp3.2 企业网站源码杭州seook优屏网络
  • 个人网站要买多大的空间广州线下教学
  • 微信网站建设模板广告推广费用一般多少
  • 上海做网站费用新疆今日头条新闻
  • 酒店网站方案郑州靠谱seo整站优化
  • win10电脑做网站百度地图排名可以优化吗
  • 网站建设的要求有哪些系统优化软件哪个最好的
  • 设计班级网站建设百度优化怎么做
  • 做设计网站网络推广员每天的工作是什么
  • 哪个网站可以做服装批发衣服宁波网络营销有哪些
  • 个人建网站成本网上推广怎么做
  • 西安市阎良区建设局网站百度竞价广告怎么投放
  • 网站添加新闻栏怎么做长沙网站提升排名