博客
关于我
类的对象定义和使用(含指针对象)
阅读量:534 次
发布时间:2019-03-08

本文共 1617 字,大约阅读时间需要 5 分钟。


在C++编程中,类的指针和对象是非常基础但又是容易混淆的概念。理解它们的区别,是每一个学习C++的人都需要掌握的核心技能。

1. 指针与对象的内存分配

类的指针是用new运算符为类实例分配内存的工具。例如:

Student* s1 = new Student();

这里,s1的值是内存地址,指向一个由Student构造函数初始化的对象。这个对象包含了类中定义的成员变量及其初始化值,比如:

Student s1;

唯一的区别在于,使用new分配的对象存储在堆内存中,而不是栈内存。

2. 引用成员的方式

类的指针和对象的成员引用方式在某些方面有所不同。

  • 对于对象,你可以使用点号.来直接引用成员:
    Student s2;s2.name = "张三";
  • 而对于类的指针,你需要使用->运算符来访问成员:
    Student* s1 = new Student();s1->name = "李四";

如果忘记使用->运算符,而是用.去访问指针成员,程序就不会被编译,会报错。

3. 存在方式的区别

  • 对象:在函数内声明的类实例,存活于函数的局部作用域,其生命周期由函数控制。

    void func() {    Student s3;    // 在这函数结束后,s3会自动释放内存}
  • 类的指针:用newmalloc分配的内存存活在程序运行的内存中,除非显式使用delete释放内存。

    Student* s4 = new Student();// 需要在适当的时候使用 delete 释放内存delete s4;

如果忘记释放分配的内存,程序会因为内存泄漏而崩溃。

4. 内存管理要点

  • 对象:因为它们定义在线函数内部,C++会自动调用析构函数释放内存,不存在内存泄漏问题。
  • 指针:需要手动使用delete释放内存,避免内存泄漏。

例如:

// 正确方式Student* s1 = new Student();// ...delete s1;

而忘记释放的代码则会引发内存泄漏。

5. 对于成员函数的调用

  • 对于对象,可以直接使用点号调用成员函数:
    s2.print();
  • 对于指针,需要使用->运算符:
    s1->print();

在实际开发中,到底选用对象还是指针,要看具体需求。对象在大多数情况下更容易使用,但如果需要高并发或对象频繁创建销毁,指针可能会更高效。

6. 代码示例

// 定义类class Student {private:    static int number;    string name;public:    Student() {}    void set(string str) {        name = str;        Static Data Member Increment;    }    void print() {        std::cout << name << ": The number of the students is "                   << number << " numbers." << std::endl;    }};int Student::number = 0;int main() {    Student* s1 = new Student();    s1->set("111");        Student s2;    s2.set("222");        s1->print();    s2.print();        delete s1;    return 0;}

这段代码展示了如何使用类的指针和对象,并通过static关键字定义了静态数据成员 number。要记住的是,new分配的是指针对象,而不是对象本身。


通过以上知识和示例,您可以更好地理解类的指针和对象的区别,从而在实际开发中灵活运用。

转载地址:http://rvsiz.baihongyu.com/

你可能感兴趣的文章
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx反向代理及负载均衡实现过程部署
查看>>
Nginx反向代理是什么意思?如何配置Nginx反向代理?
查看>>
nginx反向代理解决跨域问题,使本地调试更方便
查看>>
Nginx反向代理配置
查看>>
Nginx启动SSL功能,并进行功能优化,你看这个就足够了
查看>>
nginx启动脚本
查看>>
Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
查看>>
Nginx在Windows下载安装启动与配置前后端请求代理
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx如何实现图片防盗链
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>
nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
查看>>
Nginx安装与常见命令
查看>>
Nginx安装及配置详解
查看>>
nginx安装配置
查看>>
Nginx实战经验分享:从小白到专家的成长历程!
查看>>