`
qimo601
  • 浏览: 3445954 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

    博客分类:
  • Qt
阅读更多

转载: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)上分配空间
栈上空间自动回收,堆空间需要程序员手动回收
分享到:
评论
1 楼 aisq2008 2013-01-16  
我想明智的做法应该是new出对象来比较好,特别是当对象要作为类成员的时候,可以不用包含头文件,而使用类向前声明,减少了重新编译

相关推荐

    (C++)深度探索C++对象模型_C++_

    6. **继承与多态**:继承允许一个类(派生类)从另一个类(基类)继承属性和行为。多态性使得不同的对象可以响应同一种消息。虚函数(virtual)是实现多态的关键,它允许通过基类指针调用派生类的重写版本。 7. **...

    C++笔记-适合有c语言基础-课程基础资源

    C++编译系统只为对象的数据成员分配内存空间,一个类的所有对象共享一个成员函数空间。 与C语言的区别 C++语言与C语言的主要区别在于运行效率、初始化方法、变量定义、输入输出流的声明等方面。C语言比C++运行更...

    C++基础讲义——5

    这意味着在C++中,我们可以通过指针来显式地申请和释放内存空间,而Java则不提供这样的直接访问权限。 ##### 如何获取指针? 为了给指针赋值,我们需要能够获取变量的地址。C++提供了两种主要方式来实现这一点: 1...

    C语言32以及C++63个关键字及其含义[定义].pdf

    使用class关键字声明一个类。 9. const:常量的,constant所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。 10. const_cast:用法:const_cast...

    c/c++的一些面试题

    当一个基类指针或引用指向派生类对象时,如果析构函数是虚函数,那么在删除该指针或引用时,会调用派生类的析构函数,确保资源的正确释放。析构函数不能是纯虚函数,因为纯虚函数的目的是为了声明一个抽象基类,而...

    C_C++面试问题分类大汇总

    union(联合体)与struct(结构体)的主要区别在于,union的所有成员共享同一块内存空间,其大小由成员中占用最大内存的类型决定。而struct中成员的内存是独立的。由于union所有成员共享内存,编译器通常将其成员...

    (转)一个优秀的C++学习笔记

    ### (转)一个优秀的C++学习笔记 #### 经验之谈 - **数组使用需谨慎**:在处理数组时,特别需要注意下标的操作。数组越界是编程中常见的错误之一,可能导致程序崩溃或者未定义行为。对于数组的访问应该始终保持在...

    c++基础支持 面试八股文

    C#中所有对象都只能通过关键词“new”来创建,C++的“类名_对象名”方式在C#中变为声明一个引用。 在内存管理方面,C++使用new/delete,而C#使用托管堆来存储数组元素,更加安全。C#还禁止了switch语句的失败情形,...

    Cpp面经200问.pdf

    this指针是一个隐藏在类的非静态成员函数中的指针,指向调用该成员函数的对象。 #### 81. this指针易混问题 this指针指向调用成员函数的对象实例,不能为null,只能在类的成员函数中使用。 #### 82. 构造函数、...

    全国计算机等级考试二级C++笔试题.doc

    - **面向对象编程**:C++支持封装、继承和多态,类是对象的模板,对象是类的实例。 - **构造函数与析构函数**:构造函数用于对象初始化,析构函数则在对象销毁时执行。 - **成员函数与友元**:成员函数操作类的...

    CC++电话面试

    - **成员共享内存**:结构体的成员共用一块内存空间,改变其中一个成员可能会影响其他成员。 #### 5. 栈与堆的区别? - **栈**(Stack): - 栈是一种后进先出(LIFO)的数据结构,主要用来保存函数调用的上下文...

    C++重要知识点面经大全pdf版本

    联合体则共享同一块内存,只有一个成员在任何时候是有效的。 12. **数组与指针**:数组名是一个指向其首元素的指针,但数组和指针并非完全相同,数组是固定大小的连续内存区域,而指针可以动态改变所指的内存地址。...

    内存管理 c++高手的必然磨练

    引用则是另一个变量的别名,它在声明时必须初始化,且之后不能改变引用的对象。两者在内存管理中都有重要作用,尤其是在处理动态内存时。 C++提供了智能指针,如std::unique_ptr、std::shared_ptr和std::weak_ptr,...

    unit动态分配内存空间PPT教案学习.pptx

    当你需要一个在运行时才能确定大小的变量或对象时,可以使用`new`运算符来向系统申请自由存储区中的一块内存。例如,你可以声明一个整型指针`int *pi = new int(0)`,这会为一个整型变量分配空间并将其初始化为0。这...

    C/C++内存分配方式,堆区,栈区专题.rar

    在C/C++编程中,内存管理是至关重要的一个环节,因为它直接影响到程序的性能和稳定性。本专题将深入探讨C/C++中的内存分配方式,特别是堆区和栈区的使用,以及与VC++(Visual C++)开发环境相关的内存管理实践。 ...

    学而思 C++闯关 竞赛题 零基础.docx

    在C++中,为了兼容C语言,可以使用`extern "C"`关键字来声明C风格的函数。因此,声明`const void f(void)`为C程序中的库函数的方式是: ```cpp extern "C" { const void f(void); } ``` 这样可以确保C++...

    南理代代传C++(1).zip

    《南理代代传C++(1).zip》是一个压缩包文件,可能包含了与C++编程语言相关的教学材料,如课件、代码示例、练习题等。C++是一种广泛应用的面向对象的编程语言,由Bjarne Stroustrup于1983年在C语言的基础上发展而来。...

Global site tag (gtag.js) - Google Analytics