首页 > 编程语言 >C++智能指针讨论

C++智能指针讨论

时间:2024-08-16 16:51:28浏览次数:10  
标签:10000000 int double C++ 智能 内存 new include 指针

一段有问题的代码。

#include <iostream>
int main()
{
    for(int i = 0; i < 10000000; i++)
    {
        double *p = new double(1);
    }
    return 0;
}

这里就有了内存泄漏。

修改为下边的代码,是可以的,但是会比较占用CPU资源。

#include <iostream>
int main()
{
    for(int i = 0; i < 10000000; i++)
    {
        double *p = new double(1);
        delete p;        
    }
    return 0;
}

每次调用 new 或 delete,都会导致系统进入内核模式,进行内存管理的系统调用,这比普通的用户模式代码有更大的开销。同时,过分频繁的内存分配和释放可能会导致内存碎片,使得内存使用效率下降。尽管现代操作系统都有相应的机制来缓解内存碎片问题,但是极端情况下仍然可能出现问题。

可以使用智能指针进行内部管理,避免内存泄漏。以前可以使用std::auto_ptr。

#include <iostream>
#include <memory>
int main()
{
    for(int i = 0; i < 10000000; i++)
    {
        double *p = new double(1);
        std::auto_ptr<double> auto_p(p);
    }
    return 0;
}

但是,它在 C++11 中已经被弃用,而在 C++17 中被完全移除,原因在于其所有权转移语义可能会导致问题。

欢迎交流
在这里插入图片描述

标签:10000000,int,double,C++,智能,内存,new,include,指针
From: https://blog.csdn.net/yelede2009/article/details/141263063

相关文章

  • QT 开发循环delete指针的安全操作
    背景在做TcpSocket例子的时候,发下移除QList<QTcpSocket*>后,第二次重新连接发现出现异常。经过排查发现,原来是deleteLater与delete有区别原因分析deleteLater和delete都是在Qt中用于对象内存管理的关键方法,但它们的作用和使用时机有所不同。deleteLater用于安全异步删......
  • RFID在晶圆搬运机中的智能化实践
    RFID在晶圆搬运机中的智能化实践应用背景在半导体制造行业,晶圆搬运是一个至关重要的环节,它不仅影响生产效率,还直接关系到产品的质量和成本。在如今的多品种少量生产中,要保障生产效率和品质,工序管理至关重要。其中最有效的手段之一,就是通过RFID方式,用CIDRW头从CID载体中读写每......
  • C++速览之智能指针
    1、存在的问题c++把内存的控制权对程序员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。但是此举经常会引发一些问题,比如忘记释放内存。由于内存没有得到及时的回收、重复利用,所以在一些c++程序中,常会遇到程序突然退出、占用内存越来越多,最后不......
  • 指针学习(3)
     目录1.字符指针变量​编辑2.数组指针变量2.1定义2.2存放3.二维数组传参的本质4.函数指针变量4.1创建4.2使用 ​编辑5.typedef关键字6.函数指针数组6.1转移表1.字符指针变量顾名思义,字符指针也就是char*,在使用中,一般简单的使用可以这样#include<stdio.h>i......
  • C++ Debug
    如果右上角没有runanddebugbutton记得把setting里IntelliSenseEngine改成default,以及DebugShortcut打开如果cpp文件提示headernotfound,那需要在c_cpp_properties.json中把compilerPath,添加上debug的时候,默认他好像是会自动build的,当然也可以自己写p......
  • C++构造和析构
    文章目录一、构造函数1、构造函数的功能2、构造函数的创建3、默认构造函数二、析构函数1、析构函数的功能2、析构函数的的创建三、拷贝构造函数1、拷贝构造的功能2、拷贝构造的创建3、深拷贝一、构造函数1、构造函数的功能构造函数是一个类的成员函数,在类创......
  • 人工智能辅助创作技术指南
    文末有课程下载地址摘要:本技术文献旨在介绍一系列人工智能(AI)辅助创作指令,这些指令旨在提升内容创作的质量和效率。本指南涵盖了多种创作场景,包括文案撰写、故事创作、PPT制作、散文创作等,并提供了相应的使用教程。1.引言随着人工智能技术的发展,AI辅助创作已成为提升创作......
  • C++图像识别、图像识别接口、ocr api
    如果您在找工作并且在找内容审核编辑的工作,那么不难发现,快手在全国多个招聘网站发布了关于“内容审核编辑”岗位的招聘信息,据悉,此次的“内容审核编辑”岗位招聘的规模达3000人。因为快手上面“低龄妈妈”内容的炒作,所以被要求整改,才有后续的大规模招聘内容审核编辑人员的现象......
  • 【C++的剃刀】我不允许你还不会map和set
     ​ 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天继续更新C++部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是C++的map和set~目录 循环渐进Forward-CSDN博客关......
  • C/C++算法概述
    摘要1.性能优势:C/C++语言以其接近硬件的特性而著称,提供了对底层硬件的直接控制能力。这意味着算法可以实现更高的执行效率,特别是在需要处理大量数据或实时性能要求较高的场景中。2.灵活性:C/C++提供了丰富的数据结构和操作,允许开发者以灵活的方式实现复杂的算法。同时,C++的......