c++的类中,声明一个对象好还是用指针申请一块空间好?

本文深入解析了C++中使用普通对象与指针对象访问类成员的两种方式,阐述了它们的区别与适用场景,并通过比较C++与Java在对象声明与实例化上的差异,解释了指针对象在内存管理上的灵活性与责任。

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

转载:http://zhidao.baidu.com/question/146659560.html 

我觉得这个问题,回答的很好。

 

 在c++的类中,我如果要访问类中的成员变量或函数,有2种方法,第一种就是定义一个一个对象,如:

Class A ...  
A aa;
aa.xxx();

另外一种就是
Class B ...
B *aa = new B();
aa->xxx();
这两种方法在使用上不知有没有什么区别,或是什么情况下用指针对象,什么情况下用普通对象?

问题补充:

用指针对象,用完之后需要释放内存空间
我来帮他解答
 
满意回答
2010-04-22 18:01
你提的问题很好,这个就是c++和java之间的区别,c++函数可以不写在类里面,这样就产生了全局变量定义,
文件#include等,在java中,A a = new A()
c++中等同于 A a;
另外在c++中还有另外一中声明和实例化就是使用指针,如:A* a= new A()
c++中的A a;就已经构造了对象;
而在java中 A a; 就是声明,还没有分配空间,在c++中就非常的灵活,
A a;在栈(stack)上分配空间,A * a= new A;在堆(heap)上分配空间
栈上空间自动回收,堆空间需要程序员手动回收
### C/C++ 中已声明指针如何赋值地址 在 C C++ 编程语言中,可以通过多种方式将地址赋值给已经声明指针。以下是几种常见的方式: #### 将变量的地址赋值给指针 可以使用取地址运算符 `&` 来获取某个变量的内存地址,并将其赋值给指针。 ```cpp int myvar; int *foo = &myvar; // 使用 & 获取 myvar 的地址并赋值给 foo[^1] ``` 这段代码展示了如何通过 `&` 符号来取得整型变量 `myvar` 的地址,并将其存储到指向整型数据型的指针 `foo` 中。 #### 指向常量字符串字面量 对于字符指针来说,可以直接初始化为一个字符串字面量,此时编译器会自动处理该操作,使指针指向这个静态分配区域中的字符串起始位置。 ```cpp const char* pc; pc = "c language"; // 把字符串的首地址赋予指针变量[^2] // 或者更简洁的形式如下: char *pc = "c language"; ``` 这里定义了一个名为 `pc` 的字符指针,并让它指向了 `"c language"` 字符串的第一个字符的位置。 #### 动态分配内存后的地址赋值 当涉及到动态分配内存时(例如使用 `malloc()` 函数),返回的是所请求大小的一块连续空间的起始地址,之后可将此地址赋给相应的指针。 ```cpp #include <stdlib.h> int *ptr; ptr = (int *) malloc(sizeof(int)); // 分配足够的空间用于保存单个 int 型的数据 if(ptr != NULL){ *ptr = 10; // 如果成功,则设置其值为 10 } free(ptr); // 记得释放不再使用的堆内存在程序结束前 ``` 以上例子说明了怎样创建一个新的整数对象位于自由店上,并让我们的指针指向它;同时也强调了良好的实践习惯——总是要记得清理掉自己申请过的资源以免造成泄漏。 #### 数组名作为地址传递给指针 数组的名字本质上就是指向它的第一个元素的一个常量指针,因此可以直接用来初始化其他相同型的指针而无需显式的应用 `&` 运算符。 ```cpp char a[100] = "hello world"; char *p = a; // 等价于 char *p = &a[0]; ``` 上述片段显示了如何简单地令指针 `p` 指向由数组 `a[]` 所表示的那一片连续区域内首个成员所在之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值