栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++复习笔记——4、指针与内存管理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++复习笔记——4、指针与内存管理

文章目录

new/delete与malloc/free区别

基本数据类型:int, char, short, long, double…及数组自定义类型myDatanew/delete单个对象以及数组注意事项new分配内存,静态区栈堆 new/delete重载

new/delete局部重载new/delete全局重载全局与局部new/delete分析 list数据结构及双链表

list的应用链表归并、交换,双链表及多链表双链表管理一个类对象

new/delete与malloc/free区别 基本数据类型:int, char, short, long, double…及数组
 	int *p = new int(5);
    cout<<" p="< 
new/delete单个对象以及数组注意事项 

*对自定义类型需要严格配对 new []/ delete []或者new/delete。

	int *p = new int[3]{1,2,3};
	cout< 
new分配内存,静态区栈堆 
char str[1024] = { 0 };//内存全局静态区

int main(){
//    char str[1024] = { 0 };//栈区
//    char *str = new char[1024]{ 0 };//堆区
    int *p = new int[3]{1,2,3};//一定在堆区
    int *p1 = new (str) int[3]{1,2,3};//分配内存,指定为str开始的地址

    cin.get();
    return 1;
}

c++ new分配内存可以指定内存区域,一定程度上继承了unix系统的优良特性,Windows经常奔溃,Linux次之,Unix最为稳定,而Linux为android底层,Unix为iOS底层,这也是iOS较android更稳定的原因。这也是多数银行系统采用Unix做为服务系统的原因。
静态区栈堆的内存都可以覆盖重写,而唯独堆区内存可以delete重新利用。

new/delete重载 new/delete局部重载

单例的new/delete重载

int objs = 0;//全局变量用于统计
void *g_p = nullptr;//全局指针实现单列

using namespace std;

//无法被堆上创建的类
class mydata{
public://c++ class 默认private,如果都不写,系统会自动分配为两个public空的构造、析构函数
    mydata(){//构造
//        objs++;
        cout<<"mydata create"< 
list数据结构及双链表 
list的应用 

要了解c++的list实现细节可以参考C++链表的C实现(查找中间节点、判断是否存在环)

#include 
#include 
#include 

using namespace std;
int main()
{
    list mylist{1,2,3,4,5};
    mylist.push_back(10);
    for(auto i : mylist){
        cout< 
链表归并、交换,双链表及多链表 

归并merge()

	list mylist1{1,2,3,4,5};
    list mylist2{6,7,8,9,0,10};
    mylist1.merge(mylist2);
    for(auto ib = mylist1.begin(), ie = mylist1.end();ib!=ie;ib++){//正序
        cout<<*ib< 

交换swap()

	list mylist1{1,2,3,4,5};
    list mylist2{6,7,8,9,0,10};
	mylist1.swap(mylist2);
    for(auto ib = mylist1.begin(), ie = mylist1.end();ib!=ie;ib++){//正序
        cout<<*ib< 

多链表

	list mylist1{11,12,33,4,5};
    list mylist2{6,17,8,12,9,0,10};
    list mylist3{6,17,8,12,9,0,10};
    list> mylist{mylist1,mylist2,mylist3};
    for(auto i : mylist){
        for(auto j :i){
            cout< 
双链表管理一个类对象 

类对象即使是空指针可以访问代码区函数,但是如果该函数访问局部变量,会因为没分配内存空间报错:

class MyClass{
public:
    int i=0;
    void show(){
//        Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
//        i = 2;
        messages_base();
    }
    my
};


int main(){
    MyClass *myClass(nullptr);
    myClass->show();//代码区共享可以访问

    return 1;
}

对于类来说:类的函数共享,数据则是每个类对象私有的,空对象调用成员函数,没有访问数据,可以调用,访问数据不可以。

class MyClass;

struct Info{
    MyClass *p;
    int n;
};
list myClasslist;//双链表数据结构,管理一个类所有对象

class MyClass{
public:
    void showMessage(){
        cout<<"hello"<showMessage();
        }else{
        	//对象数组的第一个地址是数组名,要跳过
            for (int j=0; j 

要是创建树结构

struct ClassInfo{
    MyClass *p;
    int n;
    char name[10];//类的名称
};
list> myTree;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号