C++ new、delete、namespace关键字。
C++ 中的动态内存分配:
C++与C语言分配内存关键字不同,C语言中的动态内存分配是通过 malloc(分配内存) 与 free(释放内存)完成。C++使用new(分配内存) delete(释放内存)。
C++与C语言分配内存方式不同,C语言是以字节进行内存分配,C++是以类型进行内存分配。
C++申请内存方法:
变量申请内存:
type *name = new type;
delete name; 数组申请内存:
type *name = new type[N];
delete[] name; 带初始化的内存分配:
type *name = new type(val);//val 初始值
C语言申请内存方法:
int *p;
p = (int *)malloc(sizeof(int)*N);
free(p);
实验代码:
#include <stdio.h> int main(int argc, char *argv[])
{
int *pi = new int();
char *Pc = new char('c');
int *p = new int[];
printf("Begin...\n");
printf("*pi = %d\n",*pi);
printf("*pc = %c\n",*Pc);
for(int i = ;i< ; i++)
{
p[i] = i;
printf("p[%d] = %d\n",i,p[i]);
}
printf("End...\n");
delete pi;
delete Pc;
delete[] p;
return ;
}
new关键字与malloc函数的区别:
new 是C++的一部分,malloc是由C库提供的
new是以具体类型为单位进行内存分配,malloc是以字节为单位进行内存分配。
new在申请单个类型变量的时候可以进行初始化,malloc不具备这种特性。
C++ 的命名空间 namespace:
在C语言中只有一个全局作用域,这样可能发生标识符之间的冲突。
C++可以将全局作用域分成不同的部分,不同命名空间的标识符可以同名不会发生冲突。命名空间可以嵌套。全局作用域也叫作默认的命名空间。
C++ 命名空间定义:
namespace
{
namespace
{
/**/
}
/**/
}
测试代码:
#include <stdio.h> int main(int argc, char *argv[])
{
int *pi = new int();
char *Pc = new char('c');
int *p = new int[];
printf("Begin...\n");
printf("*pi = %d\n",*pi);
printf("*pc = %c\n",*Pc);
for(int i = ;i< ; i++)
{
p[i] = i;
printf("p[%d] = %d\n",i,p[i]);
}
printf("End...\n");
delete pi;
delete Pc;
delete[] p;
return ;
} #include <stdio.h> namespace Frist
{
int i = ;
} namespace seconde
{
int i=;
namespace thirdly
{
struct p
{
int x;
int y;
};
}
} int main(int argc, char *argv[])
{
using namespace Frist; //使用 Frist整个命名空间
using seconde::thirdly::p;//使用seconde 命名空间中的 thirdly命名空间中的 结构体p
printf("Begin...\n");
printf("Frist::i = %d\n",i);//直接使用 Frist 中的变量i
printf("seconde::i = %d\n",seconde::i);//使用seconde命名空间中的变量i 注意如果同时使用Frist 与seconde整个命名空间就不能直接使用变量i
p thirdly_p ={,};//初始化 seconde 命名空间中的 thirdly命名空间中的 结构体p
printf("p.x = %d\n",thirdly_p.x);//直接使用 thirdly_p.x
printf("p.y = %d\n",thirdly_p.y);
printf("End...\n"); return ;
}
运行结果:
Begin...
Frist::i =
seconde::i =
p.x =
p.y =
End...
C++ new、delete、namespace关键字。的更多相关文章
- namespace关键字学习笔记
一.namespace简介 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越 ...
- php-Eclipse对php中的namespace关键字报语法错误的问题
namespace是php5.3以上才支持的, 解决办法:升级IDE 切换Eclipse中的php版本 Window > Preferences > PHP > PHP Int ...
- PHP 命名空间(namespace)
PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物. 不过在PHP当中还是有着相当重要的意义 ...
- PHP命名空间(Namespace)的使用详解(转)
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- 关于JavaScript的namespace命名空间
写C或者JAVA习惯的人写JavaScript时可能会发现JavaScript并没有命名空间这一概念,当然如果没有接触过命名空间的程序猿(比如写js,PHP,Python)也可能对命名空间不关注或者不 ...
- C#命名空间详解namespace
命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间, 命名空间的好处是:1.避免名字冲突,2.便于查找类型名字. 如:System.secruity.Cry ...
- PHP命名空间(Namespace)的使用详解
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- new和delete操作符
C 语言中提供了 malloc 和 free 两个系统函数, 完成对堆内存的申请和释放.而 C++则提供了两个操作符 new 和 delete. 1. newnew 分配内存空间时, 分配内存空间大 ...
- PHP深入浅出之命名空间(Namespace)的使用详解
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
随机推荐
- Java使用阿里云OSS对象存储上传图片
原 Java使用阿里云OSS对象存储上传图片 2017年03月27日 10:47:28 陌上桑花开花 阅读数 26804更多 分类专栏: 工作案例总结 版权声明:本文为博主原创文章,遵循CC 4.0 ...
- RedisTemplate中zset类型的使用
简述 上一文中简述了使用StringRedisTemplate操作redis中的set类型,今天来记录一下操作zset类型的主要方法 代码 @RunWith(SpringRunner.class) @ ...
- SpringBoot 单文件和多文件上传
单.多文件上传:单文件上传使用upload.html ,多文件上传使用uploads.html 创建一个Springboot application, POM 中加入 spring-boot-star ...
- css3 水纹效果(仿写阿里云)
效果图 什么也不说了,上代码. <!DOCTYPE html> <html> <head> <title>css3 水纹效果</title> ...
- Vue源码阅读一:说说vue.nextTick实现
用法: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 疑惑: 怎么实现的延迟回调 原理: JavaScript语言的一大特点就是单线程,同一个时 ...
- LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
题目描述 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7 ...
- JavaScript Thread.Sleep()
What is the JavaScript version of sleep()? Since 2009 when this question was asked, JavaScript has e ...
- UNITY相关的一些新功能,新想法
1,lua profiler for unity : https://github.com/ElPsyCongree/LuaProfiler-For-Unity 参考文章:https://blog.c ...
- easyhook报错The given 64-Bit library does not exist
在调用 RemoteHooking.Inject 时,报错 查看easyhook源代码,出错位置如下 if(!RtlFileExists(UserLibrary)) { #ifdef _M_X64 T ...
- golang 通过reflect反射修改值
不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...