我对面向对象语言的一些看法
目前的面向对象语言中,没有一种可以手动释放一般对象的内存,只可以释放指针对象(比如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也抛弃掉。
大家发表意见,说说我的设想好不好,还有讲一下为什么当初设计语言的时候那些科学家不用这种设想来设计?欢迎拍砖!
比如我定义一个类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也抛弃掉。
大家发表意见,说说我的设想好不好,还有讲一下为什么当初设计语言的时候那些科学家不用这种设想来设计?欢迎拍砖!
...全文
相关推荐
程序员几个经典的错误看法
今天我不谈抱负理想,也不谈具体的技术,我来谈几个看法上的典型错误。下面的这些问题都是我曾经遇到,或者是我的朋友们遇到过的问题,这些都是我个人的理解,希望对大家有帮助。
计算机程序设计语言发展史和对程序设计语言未来的看法.pdf
计算机程序设计语言发展史和对程序设计语言未来的看法.pdf
看法
看法
计算机程序设计语言发展史和对程序设计语言未来的看法.docx
计算机程序设计语言发展史和对程序设计语言未来的看法.docx
simula语言的诞生
这本书描述了第一个面向对象语言simula的诞生史。该语言的设计者之一Ole-Johan Dahl讲述了simula的发展历史和当前OO的部分看法。当每个人每天都在喋喋不休地说“面向对象”这个单词时,到底有几个人是真的了解这几个字背后的切实含义。是否认真切实地思考过面向对象这种思想的更一般的含义?本书提供了一条通路,可以让大家看到OO设计发轫的源头,虽然不能提供解答上面问题的答案,但是作为一种参考和佐证,启发所有人更深入地思考“面向对象”。


