Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >指针与自由存储空间

指针与自由存储空间

作者头像
用户8247415
发布于 2021-04-13 08:11:21
发布于 2021-04-13 08:11:21
1.5K00
代码可运行
举报
文章被收录于专栏:网页前端网页前端
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
long * fellow; // create a pointer-to-long
*fellow = 223323; // place a value in never-never land

使用new来分配内存! 在大型项目中有巨大作用,减少内存!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int * pn = new int;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeName * pointer_name = new typeName;

看一串代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// use_new.cpp -- using the new operator
#include 
int main()
{
    using namespace std;
    int nights = 1001;
    int * pt = new int;  // allocate space for an int
    *pt = 1001;          // store a value there

    cout << "nights value = ";
    cout << nights << ": location " << &nights << endl;
    cout << "int ";
    cout << "value = " << *pt << ": location = " << pt << endl;
    double * pd = new double; // allocate space for a double
    *pd = 10000001.0; // store a double there

    cout << "double ";
    cout << "value = " << *pd << ": location = " << pd << endl;
    cout << "location of pointer pd: " << &pd << endl;
    cout << "size of pt = " << sizeof(pt);
    cout << ": size of *pt = " << sizeof(*pt) << endl;
    cout << "size of pd = " << sizeof pd;
    cout << ": size of *pd = " << sizeof(*pd) << endl;
    return 0;
}

输出后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nights value = 1001: location 0028F7F8
int value = 1001: location = 00033A98
double value = 1e+007: location = 000339B8
location of pointer pd: 0028F7FC
size of pt = 4: size of *pt = 4
size of pd = 4: size of *pd = 8

字节数的差别哦!

delete释放内存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int * ps = new int;   // allocate memory with new
. . .                 // use the memory
delete ps;            // free memory with delete when done
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int * ps = new int;   // ok
delete ps;            // ok
delete ps;            // not ok now
int jugs = 5;         // ok
int * pi = &jugs;     // ok
delete pi;            // not allowed, memory not allocated by new
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int * ps = new int; // allocate memory
int * pq = ps;      // set second pointer to same block
delete pq;          // delete with second pointer
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
指针
指针 指针和地址容易弄混,特别是在数组中,c++中有许多的差别,先来看一串代码!
用户8247415
2021/04/13
2840
指针
3.类和对象
类的基本思想:数据抽象和封装 数据抽象是一种依赖接口和实现分离的编程技术 接口:类的用户所能执行的操作 实现:类的数据成员、接口函数的实现及其他私有函数的实现 封装:实现了类的接口和实现分离 封装后的类隐藏了实现细节; 类的用户只能使用接口而无法访问实现部分。 面向对象三大特性:封装、继承、多态
小飞侠xp
2018/12/25
5390
c++复合类型(使用new来分配内存/创建动态数组、delete释放内存)
在c语言中,可以用库函数malloc()来分配内存;在c++中仍然可以这样做,但c++还有更好的方法——new运算符。
亦小河
2022/11/14
9770
C++STL-vector实现 空间配置器
通过观察打印结果,得到一下几个存在的问题? 1.vector中什么元素都没有,居然就进行了10次构造?按道理,没有push_back进去元素,我们只需要申请初始空间即可,不需要进行构造。 2.pop_back推出vector尾部的元素时,没有进行析构,如果此时vector的元素为对象并且持有堆资源,那么就会造成内存的泄露? 3.pop_back推出尾部元素时,只需要析构该位置的元素即可,不需要释放空间?空间的释放时机是vector对象生命周期结束时 造成上述结果的缘由: 1.vector的构造函数直接使用了new,包含两个动作,开辟空间和调用构造函数进行构造。 2.pop_back时,直接 --_last,没有进行该位置对象的析构。但是如果单纯的使用delete,不仅不会调用析构函数析构该位置的对象,还会删除该位置的内存。 综上:本质的问题就是new没有将开辟内存和构造对象这两个操作步骤分离开来。 delete没有将析构对象和释放内存这两个操作分离开来。
lexingsen
2022/02/25
2570
C++STL-vector实现 空间配置器
​C++ Primer Plus习题及答案-第十八章
1. 使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar:
艰默
2023/02/26
6640
​C++ Primer Plus习题及答案-第十八章
c++之复合类型笔记(二)
  应将内存地址给指针。可以对变量名应用&运算符,来获得被命名的内存地址,new运算符返回未命名的内存地址。
艰默
2022/11/22
3100
C++学习笔记-分配器,基础学习
它是要生成的对应对象空间的个数,比如size * sizeof(T):生成size个T对象的空间;size类型一般为ptrdiff_t,一般用于定义两个指针的距离,,因为两个指针的加减,结果已经不再是指针,而是一种距离的概念,,因此C++引入ptrdiff_t的概念,相当于long int , size_t 可以理解为 long long unsigned int....。
买唯送忧
2021/05/06
5420
[Matlab]VS和Matlab混合编程(相关API使用-进阶)
原文链接:https://blog.csdn.net/humanking7/article/details/85939988
祥知道
2020/03/10
6350
C++ Primer Plus 第四章 复合类型 学习笔记
数组(array)是一种数据格式,能够存储多个同类型的值。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素。
阳光罗诺
2021/07/26
1.9K0
C++ Primer Plus 第四章 复合类型 学习笔记
C++动态内存
很好地理解动态内存到底如何在 C++ 中发挥作用是成为一个好的 C++ 程序员所必需的。 C++ 程序中的内存分为两个部分:
软件架构师Michael
2023/08/29
2570
STL容器的线程安全性了解多少?
STL的意思是与迭代器合作的C++标准库的一部分,包括标准容器(包括string),iostream库的一部分,函数对象和算法,它不包括标准容器适配器(stack,queue和priority_queue)以及bitset和valarray容器,因为它们缺乏迭代器的支持,也不包括数组。数组以指针的形式支持迭代器,但数组是C++语言的一部分,并非库。
用户9831583
2022/12/04
1.6K0
C++ 内存管理(一)
在编程时可以通过上图的几种方法直接或间接地操作内存。下面将介绍四种C++内存操作方法:
公众号guangcity
2019/09/20
1.5K0
C++ 内存管理(一)
new和delete
在C++语言中,我们可以通过malloc分配堆上的内存,但是C++时使用new来分配内存
用户7272142
2023/10/11
2110
C/C++内存管理
注意: 申请和释放单个元素的空间,使用 new 和 delete 操作符;申请和释放连续的空间,使用 new[] 和 delete[]。
waves浪游
2024/12/15
1161
C/C++内存管理
高效内存管理:探索C++17中的pmr模块
在C++17之前,标准库提供了std::allocator,而在C++17中,这一功能得到了加强,引入了polymorphic_allocator。
公众号guangcity
2024/01/23
2K0
高效内存管理:探索C++17中的pmr模块
【C++100问】一篇文章(16个小例子)带你入门C++的编程世界(基础篇)
文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever
我是管小亮
2020/04/20
6840
C++奇迹之旅:C++内存管理的机制(进阶篇)
总结: new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数 而对于内置类型几乎是一样的
学习起来吧
2024/05/05
1840
C++奇迹之旅:C++内存管理的机制(进阶篇)
【C++】智能指针:unique_ptr
unique_ptr的产生,就是为了解决,raw pointer 的new和delete配对使用问题。对于raw pointer来说,在new了之后,在delete之前往往会出现程序异常,进而导致delete没有被释放,如此以来就会产生内存泄漏。引入了unique_ptr之后,可以有效的减轻C++程序员对于raw pointer的使用负担。参考官方文档:
灰子学技术
2020/12/08
9590
【C++】智能指针:unique_ptr
C++知识点
还没有整理过的笔记,有点乱 C++ 程序设计 II 兼谈对象模型 Conversion function - 转换函数 operator type() // this type -> other type class Fraction { // 分数类,分数可以被看成 double public: Fraction(int num, int den = 1) : m_numerator(num), m_denominator(den) {} operator double() co
yhlin
2023/02/13
8890
C++知识点
C++ 中文周刊 2024-09-07 第168期
https://devblogs.microsoft.com/cppblog/announcing-the-proxy-3-library-for-dynamic-polymorphism/
王很水
2024/09/10
1430
C++ 中文周刊 2024-09-07 第168期
相关推荐
指针
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验