| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1200 人关注过本帖
标题:C++ 用new和非new来创建对象的区别
只看楼主 加入收藏
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:8 
C++ 用new和非new来创建对象的区别
C++创建对象时
程序代码:
#include <iostream>
using namespace std;

class A
{
private:
    int n;
public:
    A(int m):n(m)
    {
    }
    ~A(){}
    void fun();
};

int main()
{
    A a(1);  //栈中分配
    A b = A(1);  //栈中分配
    A* c = new A(1);  //堆中分配
  delete c;
    return 0;
}


代码里面的注释是网上别人写的,想问下对不对?如果是这样的话,第一种情况,在栈中分配,那么类中的成员函数又要存在哪里?大家讨论下^_^
2015-06-02 22:08
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:30 
类的成员函数被所以该类的对象所共享,其生存期就是与类的生存期一个相同,我觉得应该在栈中

一片落叶掉进了回忆的流年。
2015-06-02 23:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
我认为这几条注释没啥问题

DO IT YOURSELF !
2015-06-03 08:00
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:10 
是不是用new创建的对象可以及时释放内存空间,减少内存的占用。
2015-06-03 11:00
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
new专门用于堆中建立对象,用完之后对应一个delete来释放空间。
2015-06-03 14:37
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
收藏
得分:0 
回复 2楼 诸葛欧阳
内存中的栈是不是跟我们数据结构中的栈不一样啊,内存中的栈是怎么放数据的啊,函数又怎么放。

沉淀自己,厚积薄发!
2015-06-03 23:56
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
数据结构中是没有栈的。
数据结构是程序设计者定义的,编译时,如果没有定义对应的数据结构变量,定义的数据结构是不占任何内存的,如果有对应的变量,编译器会根据你的要求在相应内存位置开辟一段大于或等于该结构定义的大小的内存空间。
栈是cpu管理使用内存的一种手段,每个程序运行时都会分配一段内存作为栈使用,栈中数据特点是先进后出,和使用他的函数、进程生存期相同。
经验证:如果向定义局部变量一样定义类,类的方法(函数)的位置也是在栈中。

能编个毛线衣吗?
2015-06-04 05:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
所有new出来的对象,都在堆中。

1楼的代码,你困惑的地方应是这一句:
A* c = new A(1);  //堆中分配
这里A是一个指针(虽然这里的命名有点怪,与类同名,但不影响原理解释),它指向的就是堆中的对象,那个对象是依据类A为模板创建出来的,这个对象所有的数据都在堆上。

其他的语句,是在栈上创建对象。是对象在栈上还是堆上的问题,你实际上只要把class A视为int就一切都明白。记住:C++中class是定义一个数据类型,其地位与int、double等完全一样。

[ 本帖最后由 TonyDeng 于 2015-6-4 10:55 编辑 ]

授人以渔,不授人以鱼。
2015-06-04 10:53
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
数据结构中的栈其实就是我们自定义的一种数据类型或者说是一个类

一片落叶掉进了回忆的流年。
2015-06-04 13:23
快速回复:C++ 用new和非new来创建对象的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020396 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved