#include <iostream>
using namespace std;
class Box
public:
Box(int,int);
~Box();
void volume();
static int height;
int width;
int length;
Box::Box(int wi, int le)
width = wi;
length = le;
Box::~Box(){cout<<"width: "<< width <<"the pointer is released."<<endl;}
void Box::volume()
cout<<height*width*length<<endl;
int Box::height = 100;
int main()
Box* p = new Box(10,20);
cout<<"point "<<p<<endl;
cout<<&(p->height)<<endl;
cout<<&(p->width)<<endl;
cout<<&(p->length)<<endl;
cout<<sizeof(p)<<endl;
cout<<sizeof(*p)<<endl;
cout<<sizeof(Box)<<endl;
Box* p1 = new Box(30,40);
cout<<"point "<<p1<<endl;
cout<<&(p1->height)<<endl;
cout<<&(p1->width)<<endl;
cout<<&(p1->length)<<endl;
cout<<sizeof(p1)<<endl;
cout<<sizeof(*p1)<<endl;
cout<<sizeof(Box)<<endl;
delete p;
delete p1;
Box a = Box(1,2);
Box *pa = &a;
cout<<"point "<<pa<<endl;
cout<<&(pa->height)<<endl;
cout<<&(pa->width)<<endl;
cout<<&(pa->length)<<endl;
cout<<sizeof(pa)<<endl;
cout<<sizeof(*pa)<<endl;
cout<<sizeof(a)<<endl;
Box b = Box(3,4);
Box *pb = &b;
cout<<"point "<<pb<<endl;
cout<<&(pb->height)<<endl;
cout<<&(pb->width)<<endl;
cout<<&(pb->length)<<endl;
cout<<sizeof(pb)<<endl;
cout<<sizeof(*pb)<<endl;
return 0;
point 0x791470
0x405004
0x791470
0x791474
point 0x791108
0x405004
0x791108
0x79110c
width: 10the pointer is released.
width: 30the pointer is released.
point 0x61fef8
0x405004
0x61fef8
0x61fefc
point 0x61fef0
0x405004
0x61fef0
0x61fef4
width: 3the pointer is released.
width: 1the pointer is released.
delete释放的指针,再访问例1#include <iostream>using namespace std;class Box{public: Box(int,int); ~Box(); void volume(); static int height; int width; int length;};Box::Box(int wi, int le){ width = wi; length =
静态变量是一个特殊的局部变量,通过前面的学习我们知道,在函数内部定义一个局部变量,函数调用结束之后这个变量就会被销毁,不能继续使用了。而静态变量不同,静态变量在初始化之后,会在程序运行期间会一直存在。
和局部变量相比,静态变量具有一下特点:
当函数执行完毕后,静态变量不会消失;
静态变量只能在函数内部使用;
静态变量只会被初始化一次;
静态变量初始化的值可以省略,默认值为 null;
静态变量的初始值只能是具体的字符串、数值等,而不能是一个表达式。
也就是说,静态变量的初始化只进行一次,而且是在.
1 静态局部变量在静态存储区内分配存储单元。在程序运行期间都不释放。
2 对静态局部变量是在编译时赋初值的,即只赋值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上一次函数调用结束时的值。
3 静态局部变量,如果定义的时候没有赋初值,编译时自动赋初值0或者空字符。
4 静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它,在其他函数中,它是"不可见"的...
传递给delete的指针必须指向动态分配的内存,或者是一个空指针。
delete一块并非new的内存,或将相同的指针值释放多次,其行为是未定义的。
编译器不能分辨一个指针所指向的对象是静态还是动态分配的。
编译器也不能分辨一个指针所指向的内存是否已经释放。
delete一个已经delete的指针,为什么有时候会报错有时候不会?一个指针delete后是什么状态?
reference1:使用delete删除指针(转) - romanten - 博客园 (c
在C++中delete函数用于回收new分配的内存空间。
C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
在针对简单的基本数据类型,使用delete也可...
首先要理解生存周期与作用域的区别:
生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。
作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。
static变量是指静态的变量,不管是在全局还是局部声明的static
static 的用法
static关键字是C,
C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在
C++中使用(C,
C++中具体细微操作不尽相同, 本文以
C++为准).(1)
局部静态变量 (2)外部
静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明
(1)
局部静态变量
1,malloc free和new delete的区别
malloc 和 free 在对于普通变量是可以混合使用的,但是malloc和free是函数;
new 和delete 是操作符,速度更快;
Test *tp = (Test*)malloc(sizeof(Test)); //不会调用对象的构造函数
//p(10, 20);
tp->...
int * p = (int * ) malloc(sizeof(int) ) ;
int * p = (int * ) malloc(sizeof(int)*10); 生成一个数组的空间
int * p = new int (10) ; 生成一个int型内存空间,并指向 10
int * p = new int[10] ; 生成数组的空间。