C++动态内存分配与命名空间

目录

一 动态内存分配

二 命名空间

一 什么是命名空间?

二 使用命名空间的注意点


一 动态内存分配

程序中的内存分为两个部分:

栈:在函数内部声明的所有变量都将占用栈内存。

堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。

在 C++ 中,使用new 运算符在运行时分配堆内的内存,它将返回所分配的空间地址。

然后动态内存使用完毕后使用 delete 运算符,删除之前由 new 运算符分配的内存。

实例代码:

//
// Created by 11010 on 2023/4/9.
//

#ifndef CPP_16_MEMORYANDNAMESPACE_STUDENT_H
#define CPP_16_MEMORYANDNAMESPACE_STUDENT_H
#include "iostream"

class Student {
public:
    void print();
    ~Student();
};


#endif //CPP_16_MEMORYANDNAMESPACE_STUDENT_H





//
// Created by 11010 on 2023/4/9.
//

#include "Student.h"

void Student::print() {
std::cout<<"hello world!"<<std::endl;
}


Student::~Student() {
std::cout<<"对象被释放 --delete"<<std::endl;
}





#include <iostream>
#include "Student.h"

int main() {

    //使用new 创建动态内存,同时返回对象的地址
    Student *student=new Student;
    student->print();
    //使用完毕后,使用delete释放内存
    delete student;

    //申请一个普通变量的动态内存
    int *pInt=new int ;
    *pInt=100; //在申请到的内存上面存储值
    std::cout<<*pInt<<std::endl; //输出地址存储的值
    delete pInt; //释放所占用内存

    //为数组申请动态内存
    int *array=new int [2];
    //给数组赋值
    array[0]=12;
    array[1]=23;
    //使用数组元素
    std::cout<<array[0]<<","<<array[1]<<std::endl;
    //删除数组所占用的内存
    delete[] array; //注意: delete后面多一个数组专用符号 []


    //对象数组的内存分配
    Student *s=new Student[3]; //申请有三个对象的数组
    //使用对象
    s[0].print();
    s[1].print();
    s[2].print();
    //删除对象数组
    delete[] s;

    std::cout << "Hello, World!" << std::endl;
    return 0;
}

二 命名空间

一 什么是命名空间?

命名空间就是定义了一个范围,用于解决区分不同库中相同名称的函数、类、变量等冲突的问题。使用了命名空间即定义了上下文。

二 使用命名空间的注意点

  1. 命名空间的定义使用关键字 namespace,后跟命名空间的名称;
  2. 使用 using namespace + 命名空间名称 的方式使用指定当前所需要的命名空间。
  3. 命名空间可以定义在几个不同的部分中,一个命名空间的各个组成部分可以分散在多个文件中。
  4. 如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。
  5. 命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,可以通过使用 :: 运算符来访问嵌套的命名空间中的成员。

实例代码:

//
// Created by 11010 on 2023/4/9.
//

#ifndef CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO_H
#define CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO_H

#include "iostream"

//使用using namespace 命名空间名称: 指定当前需要使用std命名空间,这样在使用时就不需要加std::前缀了。
using namespace std;

//定义一个命名空间叫MySpace
namespace MySpace{

    //在命名空间内定义一个类
    class nameSpaceDemo {
    public:
        void print();
    };

    //右嵌套一个命名空间
namespace MP{
    //仍然申明一个叫print的方法
static void print() {
     cout<<"MySpace::MP::print()"<<endl;
    }
}
}

#endif //CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO_H





//
// Created by 11010 on 2023/4/9.
//

#include "nameSpaceDemo.h"

void MySpace::nameSpaceDemo::print() {
cout<<"MySpace::nameSpaceDemo::print()"<<endl;

}





//
// Created by 11010 on 2023/4/9.
//

#ifndef CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO2_H
#define CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO2_H

#include "iostream"

//使用using namespace 命名空间名称: 指定当前需要使用std命名空间,这样在使用时就不需要加std::前缀了。
using namespace std;

//使用已定义的MySpace,为已有的MySpace增加元素
namespace MySpace {
    class nameSpaceDemo2 {
    public:
        void print();
    };

}
#endif //CPP_16_MEMORYANDNAMESPACE_NAMESPACEDEMO2_H





//
// Created by 11010 on 2023/4/9.
//

#include "nameSpaceDemo2.h"

void MySpace::nameSpaceDemo2::print() {
    cout<<"MySpace::nameSpaceDemo2::print()"<<endl;
}

主函数:

//使用具有多多层命名空间的方法
MySpace::nameSpaceDemo demo;
demo.print();
//调用二级命名空间下的print方法
MySpace::MP::print();


//使用分散的命名空间: 先定义命名空间,然后后续再在原有的命名空间增加元素,nameSpaceDemo2为在MySpace后续增加的元素。
MySpace::nameSpaceDemo2 demo2;
demo2.print();

完整代码clone地址:[email protected]:XiaoWang_csdn/cpp_16_memoryandnamespace.git

猜你喜欢

转载自blog.csdn.net/XiaoWang_csdn/article/details/130818773
今日推荐