关闭

在C++里,有两种方法创建对象:

236人阅读 评论(0) 收藏 举报
分类:

方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
例如,我定义了一个这样的类:
class Rec
{
   public:
   Rec(int width,int height);
   ~Rec();
   int getArea();
   private:
   int Rwidth;
   int Rheight;
};
当你Rec myRec(5,5);这样创建一个myRec对象, 然后打印出sizeof(myRec);的时候,会得到 8 这个结果。
因为myRec中有2个int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。
这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数
注意:该方法创建的对象调用类方法时,必须用“.”,而不能用“->”.如myRec.getArea();
=============================================================================================
方法二:
ClassName *object=new ClassName(param);
delete object;
这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;
例如:Rec *rec=new Rec(3,4);
      rec->getArea();
      delete rec;
顺便提一下:
一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。 在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。
另外收集了两种方法的优点:
new出来的在堆上,直接定义的在栈上,栈的大小有限制
new的好处:
1、需要的时候才new(在复杂权限和业务逻辑系统中很重要)
2、对象可靠性检查(没有栈空间的限制问题)
3、对象的适度留用控制

0
0
查看评论

JAVA中创建线程对象的两种方法

1.通过继承Thread类创建线程    从Thread派生出一个新类,在其中加入属性和方法,同时覆盖run()方法。当创建这样一个派生类的新对象后,使用start()方法,即可启动该线程。public class testThread { public stati...
  • DSB2510
  • DSB2510
  • 2010-06-17 21:20
  • 4346

C++三种创建对象的方法区别

我们都知道C++中有三种创建对象的方法,如下: 复制代码代码如下: #include using namespace std; class A { private:     int n; public:     A(...
  • lx627776548
  • lx627776548
  • 2016-07-29 18:08
  • 2827

C++创建对象的三种方式

C++中有三种创建对象的方法 #include using namespace std; class A { private: int n; public: A(int m):n(m) { } ~A(){} }; int main() { A a(1)...
  • azhexg
  • azhexg
  • 2013-11-06 12:56
  • 28465

Spring创建对象的三种方法之二静态工厂创建(源码)

不说废话,直接源码,详细关于理论方法的知识,自己去网上面找吧,这个是关于Spring创建对象的三种方法中的:用静态工厂创建。 需要用到三个类, 第一个类: package dao; public class AA { public void m(){ System...
  • java_xuetu
  • java_xuetu
  • 2016-09-25 13:54
  • 718

C++中的构造函数与创建对象的(简单)过程

•构造函数      –和类名相同      –没有返回值类型      –只在建立对象的时候被自动调用一次      –调用构造函数的主要目的是初始化对象 •一个对象的创建...
  • love9099
  • love9099
  • 2015-01-19 15:22
  • 2463

C++创建对象的两种方法(C++用new和不用new创建类对象)

from:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html   在C++里,有两种方法创建对象: 方法一: ClassName object(param); 这样就声明了一个ClassName类型...
  • lz20120808
  • lz20120808
  • 2014-11-05 21:36
  • 9228

java实现线程的两种方法有什么区别?

如果一个类通过继承Thread来实现多线程的话,则不适合多个线程共享资源,而通过实现Runnable就可以做到这一点,下面给lz举个例子: Java code class MyTheard extends Thread{     private int num = 5;//...
  • u010572068
  • u010572068
  • 2013-07-03 21:52
  • 1351

[C++]--对象创建的两种方式

也不知道到底是怎么回事,最近学了C++以后老是会混淆两种创建对象的方法,这里做一个大体的总结: 第一种:使用new的方式创建的对象 clock* alarm = new clock; delete alarm; 这种方式有两点需要注意的,一点是用new创建的是对象指针,此时将调用构造函数,del...
  • wangyijieonline
  • wangyijieonline
  • 2016-04-03 20:24
  • 661

C++创建对象的两种方法

在C++里,有两种方法创建对象: 方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。 注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函...
  • itcdbb
  • itcdbb
  • 2013-10-16 21:00
  • 680

C/C++创建对象的两种方式

刚学C++肯定被其创建对象搞的糊里糊涂,其不像Java那样直接通过new就可以创建对象了,而且还不需要人为的去回收,但C++却不行其有两种方式创建对象:1、通过new创建类对象CTest* pTest = new CTest();delete pTest;pTest用来接收类对象指针。这种情况可以使...
  • dongxianfei
  • dongxianfei
  • 2016-12-24 15:58
  • 1436
    个人资料
    • 访问:244525次
    • 积分:3807
    • 等级:
    • 排名:第9991名
    • 原创:90篇
    • 转载:298篇
    • 译文:1篇
    • 评论:9条
    最新评论