我对C++的一些疑问,最近使用C++,总感觉有些东西自己没有抓住,也可能是自己基础学的不是很扎实,所以对一些基本的东西理解不够透彻导致的。
因为自己在学校也学过C#和java,C#它是一个完全的面向对象的语言,所以没有这么麻烦,在C#中除了基本的几种值类型,其他的一切都是对象,都是Object的子类。
我的疑问如下:
1、在C#中对象声明并不开辟存储空间,直到调用类的构造函数显示的初始化对象,之后才会开辟空间,而在C++中,对象声明之后就会自动调用默认构造函数,这样,是不是已经开辟了存储
空间了呢?
自己的回答:C++中调用构造函数有几种方式,如 Point p;此时,会自动调用类Point的默认构造函数,而且默认系统会自动为C++中的一个类生成3个默认构造函数,分别是:无参默认构造函数、拷贝构造函数、赋值构造函数。所以C++中声明时即为此对象开辟了存储空间。这里需要注意C++中的new和C#中new的区别。C++中new是在堆上开辟一段内存存储对象元素。而C#中new是为了显示调用构造函数实例化对象。
2、还有就是在编程中,往往需要给函数传递参数,而参数可能是地址,那么是不是不能传递局部对象的地址呢?如果遇到这种情况,一定需要用new在堆上创建对象么?那么这样又出现了对
象释放的问题。该怎么处理呢?
自己的回答:此时就应该使用new在堆上上创建对象,在对象不用时销毁对象。其实实现起来也不是那么麻烦,只是可能因为牵涉到指针操作,所以在做之前就认为很难,其实真的做起来,只要考虑完全,操作指针还是很方便的。
3、
未完待续。。。