C++超详细知识点(一):类实例化对象的创建和释放

本文详细介绍了C++中对象的两种实例化方式:栈上通过普通变量和堆上通过指针变量。讲解了栈上自动释放和堆上需手动释放内存的概念,以及free函数在动态内存管理中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题: 对象的创建和释放

1. 类的实例化(创建对象)通常有两种方式

栈上实例化: 通过直接声明一个对象,对象会被分配在栈上。 (普通对象)
堆上实例化: 使用 new 操作符在堆上分配内存来创建对象,返回对象的指针。(指针对象)

(1)栈上 创建和释放:实例化为普通变量对象

创建: 类名 对象名 ;
如: Student qjl;   使用 . 操作符访问成员变量。

释放: 对象是栈上的,销毁时会自动释放内存。

#include <iostream>

class Student 
{
	public:
	    int id;
	    std::string name;
 /*
   使用 std::string 类型时,你可以直接进行字符串的赋值、连接、截取等操作,而不需要手动管理字符串的内存。
   std::string 会自动处理字符串的内存分配和释放,减少了内存管理的复杂性,并提供更好的安全性。
   使用 char* 时,你需要手动分配和释放内存,以确保字符串的正确存储和释放。
*/
};

int main() {
    // 栈上实例化
    Student qjl;
    qjl.id = 1;
    qjl.name = "QJL";

    // 使用对象
    std::cout << "ID: " << qjl.id << ", Name: " << qjl.name << std::endl;
    return 0;
}

(2)堆上 创建和释放:实例化为指针变量对象

  概念:你可以使用 new 操作符来动态创建对象,且delete 操作符用于释放通过 new 操作符动态分配的内存。动态创建对象通常在堆上分配内存,而释放对象则是通过释放该内存。

创建: 类名 *对象名= new 类名();
 如:Student *qjl = new Student();   使用 -> 操作符访问成员变量。

释放: 对象是堆上的,销毁时用delete操作符释放内存。如delete 对象名;

#include <iostream>

class Student
{
	public:
	    int id;
	    std::string name;
	    char *name2;
 /*
   使用 std::string 类型时,你可以直接进行字符串的赋值、连接、截取等操作,而不需要手动管理字符串的内存。
   std::string 会自动处理字符串的内存分配和释放,减少了内存管理的复杂性,并提供更好的安全性。
   使用 char* 时,你需要手动分配和释放内存,以确保字符串的正确存储和释放。
*/
};

int main() {
    // 堆上实例化
    Student *qjl = new Student();
    qjl->id = 1;
    qjl->name = "QJL";

    // 使用对象
    std::cout << "ID: " << qjl->id << ", Name: " << qjl->name << std::endl;

    // 释放内存
    delete qjl;
    return 0;
}

2. 常见的free 函数是什么?

  在C++中,free 函数不是用于释放类对象的内存的,而是用于释放由 malloc、calloc 或 realloc 等 C 标准库函数分配的变量的动态内存。
例如:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 使用 malloc 分配动态内存
    int *dynamicArray = (int *)malloc(5 * sizeof(int));

    if (dynamicArray == NULL) {
        fprintf(stderr, "Memory allocation failed\n");
        return 1; // 返回错误代码
    }
    // 初始化动态数组
    for (int i = 0; i < 5; ++i) {
        dynamicArray[i] = i * 2;
    }
    // 使用动态数组
    for (int i = 0; i < 5; ++i) {
        printf("%d ", dynamicArray[i]);
    }
    // 释放动态分配的内存
    free(dynamicArray);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值