我对面向对象语言的一些看法

ganzhengzheng 2010-12-13 04:56:22
目前的面向对象语言中,没有一种可以手动释放一般对象的内存,只可以释放指针对象(比如c++),一般对象的内存释放只能交由垃圾回收器(比如c#,java)。所以我一直很纳闷,假若随意一个对象可以通过delete的方式释放掉,不就可以同时抛弃指针和垃圾回收器了吗。
比如我定义一个类Class1

class Class1
{
public Class2 c2 ;//这个是类中的全局对象

public Class1() //构造函数
{
c2 = new Class2();
}

public ~Class1() // 析构函数
{
delete c2; //释放c2。
}
}

void Main()
{
Class1 c1 = new Class1();
delete c1;//释放c1时会调用c1的析构函数,把里面的c2释放掉。
}


假若有一种程序语言能实现以上设想,指针和垃圾回收器都可以不需要了,内存交由自己管理。方法内部的局部变量可以设计成无需delete自动释放,比如:

void fun()
{
Class1 c1 = new Class1();
....... //这个c1是局部变量,所以不用手动加delete,当fun方法执行完毕自动delete。
}

再将类设计成值类型,假若要进行引用传递则:
Class1 c1 = new Class1();
Class1 c2 = &c1; //这是引用传递,c2改变值c1会跟着改变.
Class1 c3 = c1; //这则是默认的值传递,c3的值改变不会影响到c1.

这样是为了跟struct一致,可以连struct也抛弃掉。

大家发表意见,说说我的设想好不好,还有讲一下为什么当初设计语言的时候那些科学家不用这种设想来设计?欢迎拍砖!









...全文
133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xpcxpy 2010-12-14
  • 打赏
  • 举报
回复
若一个对象有多个引用指向,那在哪销毁呢
斗七 2010-12-14
  • 打赏
  • 举报
回复
引用 11 楼 vrhero 的回复:

这里是论坛不是课堂...我没有义务给你解释这类基础问题,而且那要花上一整本教材的篇幅和时间,我显然没有那闲功夫和闲时间...
ganzhengzheng 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 vrhero 的回复:]
这里是论坛不是课堂...我没有义务给你解释这类基础问题,而且那要花上一整本教材的篇幅和时间,我显然没有那闲功夫和闲时间...

你真想弄懂就去找书看,用google搜在线资料也行...都是十年前就有的教材...
[/Quote]
你说你没时间解释,我怀疑你其实也是不懂!
vrhero 2010-12-13
  • 打赏
  • 举报
回复
这里是论坛不是课堂...我没有义务给你解释这类基础问题,而且那要花上一整本教材的篇幅和时间,我显然没有那闲功夫和闲时间...

你真想弄懂就去找书看,用google搜在线资料也行...都是十年前就有的教材...
  • 打赏
  • 举报
回复
楼主是觉得平常开发时间用得太高效,想把时间重新都花费在讨论关于“内存泄漏、无法调制”之类的无聊bug上吧。
加油馒头 2010-12-13
  • 打赏
  • 举报
回复
C# JAVA就是 为了防止 原来C,C++ 直接管理内存时 存在内存的泄露,混乱等问题。。。

你说的直接释放内存,最原始的就是那样的

好比C,C++ 都是自己控制内存的开辟与释放的
ganzhengzheng 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vrhero 的回复:]
你连对象、指针都是些什么东东都不明白,大概更不明白内存分配和回收是什么原理..这还有什么好讨论的...
[/Quote]

你明白的话给我解释一下,为什么c++要设计成Class1 c1;和Class1 *c1;两种,c1不可以delete,而*c1可以delete,统一为Class1 c1;delete c1;抛弃Class1 *c1,为什么不可以设计成这样,你要说清楚,不要动不动就说别人不明白,不懂,好像自己什么都晓得一样,你晓得你解释给我听啊!
vrhero 2010-12-13
  • 打赏
  • 举报
回复
你连对象、指针都是些什么东东都不明白,大概更不明白内存分配和回收是什么原理..这还有什么好讨论的...
xiehuanxie 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ganzhengzheng 的回复:]
引用 3 楼 lishenghu365 的回复:
面向对象是一种思维模式,具体到计算机中就是内存组织。
楼主想自己管理对象内存,是个好想法,关键是一般的程序设计和开发者不具备这么好的逻辑思维能力


这是因为只能管理指针对象内存,假若不用指针,改成普通对象都可手动即时释放,管理难题便可大大减轻!
[/Quote]

先弄明白了基本的概念再开始YY,

什么是值类型? 什么是引用类型? 什么是装箱?

YY是要建立在一定理论的基础上的, 否则还是要走以前的老路。
ganzhengzheng 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lishenghu365 的回复:]
面向对象是一种思维模式,具体到计算机中就是内存组织。
楼主想自己管理对象内存,是个好想法,关键是一般的程序设计和开发者不具备这么好的逻辑思维能力
[/Quote]

这是因为只能管理指针对象内存,假若不用指针,改成普通对象都可手动即时释放,管理难题便可大大减轻!
ganzhengzheng 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
首先...“面向对象语言”和“释放内存”毫无关系...

其次...自动垃圾回收机制是进步,你为什么想回到原始社会呢?
[/Quote]

因为自动回收机制你是不可预知,那些内存什么时候会释放,或者究竟会不会释放你都无法把握,只能看垃圾回收器本身质量的好坏,但是有些对象因为占的内存较大,想即时释放掉它,这就必须手动释放了,因为我平时用的通常是面向对象语言,垃圾回收,内存自动释放也是新兴面向对象语言宣传的理念,所以我就将其两者关联其来说了。
李先生2017 2010-12-13
  • 打赏
  • 举报
回复
面向对象是一种思维模式,具体到计算机中就是内存组织。
楼主想自己管理对象内存,是个好想法,关键是一般的程序设计和开发者不具备这么好的逻辑思维能力
vrhero 2010-12-13
  • 打赏
  • 举报
回复
首先...“面向对象语言”和“释放内存”毫无关系...

其次...自动垃圾回收机制是进步,你为什么想回到原始社会呢?
Return门徒 2010-12-13
  • 打赏
  • 举报
回复

沙发先

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧