本文共 1617 字,大约阅读时间需要 5 分钟。
在C++编程中,类的指针和对象是非常基础但又是容易混淆的概念。理解它们的区别,是每一个学习C++的人都需要掌握的核心技能。
类的指针是用new运算符为类实例分配内存的工具。例如:
Student* s1 = new Student();
这里,s1的值是内存地址,指向一个由Student构造函数初始化的对象。这个对象包含了类中定义的成员变量及其初始化值,比如:
Student s1;
唯一的区别在于,使用new分配的对象存储在堆内存中,而不是栈内存。
类的指针和对象的成员引用方式在某些方面有所不同。
.来直接引用成员:Student s2;s2.name = "张三";
->运算符来访问成员:Student* s1 = new Student();s1->name = "李四";
如果忘记使用->运算符,而是用.去访问指针成员,程序就不会被编译,会报错。
对象:在函数内声明的类实例,存活于函数的局部作用域,其生命周期由函数控制。
void func() { Student s3; // 在这函数结束后,s3会自动释放内存}类的指针:用new或malloc分配的内存存活在程序运行的内存中,除非显式使用delete释放内存。
Student* s4 = new Student();// 需要在适当的时候使用 delete 释放内存delete s4;
如果忘记释放分配的内存,程序会因为内存泄漏而崩溃。
delete释放内存,避免内存泄漏。例如:
// 正确方式Student* s1 = new Student();// ...delete s1;
而忘记释放的代码则会引发内存泄漏。
s2.print();
->运算符:s1->print();
在实际开发中,到底选用对象还是指针,要看具体需求。对象在大多数情况下更容易使用,但如果需要高并发或对象频繁创建销毁,指针可能会更高效。
// 定义类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/