1、使用指针可以动态分配变量的内存。

(1)比如在定义一些较大大的局部变量时,会出现栈溢出,因为栈的默认最大时1M。而如果这时使用指针,分配内存就不会存在该问题,指针可以分配很大的内存。

#include <memory>
typedef struct _CUST
{int dwSize;char chName[200];std::string strAddress;
}CUST;std::shared_ptr <CUST> p = std::make_shared<CUST>();

(2)在线程函数中传输内存较大的数据时,线程的默认栈大小是有限制的,这时有可能会出现栈溢出。使用指针作为变量,就不会出现该问题,因为指针的大小为4个字节(32位编译器)。(指针的值变量的值是指向分配内存的地址)

#include <thread>
#include <mutex>
#include <iostream>
#include <memory>std::mutex gMutex;  // protects g_i
typedef struct _CUST
{int dwSize;char chName[200];std::string strAddress;
}CUST;void  func1(std::shared_ptr <CUST> p)
{const std::lock_guard<std::mutex> lock(gMutex);std::cout << "正在运行线程ID:" << std::this_thread::get_id() << std::endl;//TO DO}int main()
{std::shared_ptr <CUST> p = std::make_shared<CUST>();p->dwSize = sizeof(CUST);strncpy_s(p->chName, "Hello", sizeof(p->chName)-1);std::thread work(func1,p);work.join();
}

2、指针可以共享数据,减少数据拷贝带来的内存消耗,但在使用完时要进行释放。

(1)一般利用函数传递内存较大的参数,选择使用引用作为参数,这可以减小数据拷贝带来的内存消耗。同样,也可以利用指针作为参数传递数据,也可以减少数据的拷贝。

3、定义指针为函数返回值,返回除正常的返回值之外的其他数据,从而实现两者间的双向通信。

(1)可以定义另一个类指针,作为函数的返回值,可以就可以通过返回的指针获取该类成员。

4、可以提高程序的编译效率和执行速度,使程序更加简洁。

5、指针还用于表示和实现各种复杂的数据结构,从而为编写出更加高质量的程序奠定基础。

C++中指针优点与线程中指针变量访问相关推荐

  1. java线程中等待_Java:线程中的Thread.sleep():没有等待

    线程没有睡觉我有问题. 我不能把我的整个代码放在这里.所以,为了重现,这里是一个等待5秒的基本代码. try { int millisec = 5000; System.out.println(new ...

  2. QT中主线程终止子线程中的死循环

    终止子线程循环 一,原因 二,解决方法 一,原因 子线程中存在死循环,在主线程退出后,子线程还在继续运行,无法起到杀死线程的作用,造成后台存在多个相同功能进程,占用资源. 二,解决方法 发送SengM ...

  3. python中intvar_在Python线程中使用Intvar/DoubleVar是否安全?

    基于_tkinter模块的comments in the source code,看起来tkinter实际上至少是为了使线程安全,只要Tcl是用enable-threads选项构建的.这是由Pytho ...

  4. C#多线程开发-处理子线程中的异常

    C#多线程开发-处理子线程中的异常 在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎.如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用. 其中需要说 ...

  5. android 线程 界面,android开发教程之子线程中更新界面

    每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联. Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器.2)线程间 ...

  6. Android中Handler的使用方法——在子线程中更新界面

    本文主要介绍Android的Handler的使用方法.Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列.每个Handler对象与创建它的线程相关联,并且每个Ha ...

  7. Android--Handler的使用方法:在子线程中更新界面

    版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/chaoyu168/article/details/50914021 本文主要介绍Android的Handl ...

  8. InheritableThreadLocal——父线程传递本地变量到子线程的解决方式及分析

    上一个博客提到ThreadLocal变量的基本使用方式,可以看出ThreadLocal是相对于每一个线程自己使用的本地变量,但是在实际的开发中,有这样的一种需求:父线程生成的变量需要传递到子线程中进行 ...

  9. STL中迭代器的作用,有指针为何还要迭代器

    请你来说一下STL中迭代器的作用,有指针为何还要迭代器 参考回答: 1.迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴 ...

  10. c语言野指针和空指针,C++中的空指针和野指针

    空指针常量 一个表示0值的整数常量,叫做空指针常量.例如:0.0L.1-1(它们都是值为0的整数常量表达式)以及(void*)0.void* NULL 都是空指针常量,空指针常量可以赋值给任何指针类型 ...

最新文章

  1. redis之 centos 6.7 下安装 redis-3.2.5
  2. 【必看】 一篇 CPU 占用高,导致请求超时的故障排查
  3. linux为什么开机后有多个内核,CentOS7开机界面出现多个内核选项
  4. amount describe
  5. JQuery让input从disabled变成enabled
  6. android 接口报错409,android 在调用微信刷脸获取用户信息时,在还未完成识别时点击退出,WxPayFace 停止应用...
  7. poj 2309 BST 使用树状数组的lowbit
  8. MTK GPS问题调试
  9. 联想拯救者y7000p加内存条_内存、硬盘不够用?手把手教你升级联想拯救者Y7000P...
  10. 私域运营之“小程序商城微信生态工具运营”——分销系统
  11. git commit--amend
  12. 决策树可视化以及数据所要的处理(查漏补缺)
  13. C++实现七参数转换法(布尔莎模型)
  14. 豆瓣2022年度影视资源榜单合集,速度保存!
  15. 摇号系统 - 【python】
  16. 国外免费 E-Book
  17. OSChina 周二乱弹 ——现在我满眼都是小星星
  18. 远控免杀专题(13)-zirikatu免杀(VT免杀率39/71)
  19. 考川大计算机硕士选专硕还是学硕好,考川大的财经学硕好还是西财的金融专硕好啊?......
  20. Settings搜索栏数据搜索流程之搜索和页面跳转

热门文章

  1. dd 转换和拷贝复制文件
  2. lvcreate 创建逻辑卷
  3. 微信小程序获取是android还是ios,微信小程序-手机操作系统以及微信版本判断
  4. php 差错,PHP 错误处理
  5. java 隐式构造,java隐式创建的对象
  6. wlnmp+nginx+mysql+php集合包_Centos7下编译安装Nginx、Mysql、PHP
  7. android 一位小数_android如何保留小数点后x位数字
  8. python的三个基本数字类型_Python基础学习--三 基本数据类型
  9. 【经验】JavaScript
  10. intelliJ idea代码折叠