我对面向对象语言的一些看法
目前的面向对象语言中,没有一种可以手动释放一般对象的内存,只可以释放指针对象(比如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也抛弃掉。
大家发表意见,说说我的设想好不好,还有讲一下为什么当初设计语言的时候那些科学家不用这种设想来设计?欢迎拍砖!