现在的位置: 首页 > 综合 > 正文

java/c++禁止产生堆/栈对象及其他

2018年04月12日 ⁄ 综合 ⁄ 共 885字 ⁄ 字号 评论关闭

禁止产生堆对象: 

     那么怎样禁止产生堆对象了?我们已经知道,产生堆对象的唯一方法是使用new操作,如果我们禁止使用new不就行了么。再进一步,new操作执行时会调用operator new,而operator new是可以重载的。方法有了,就是使new operator为private,为了对称,最好将operator delete也重载为private。现在,你也许又有疑问了,难道创建栈对象不需要调用new吗?是的,不需要,因为创建栈对象不需要搜索内存,而是直接调整堆栈指针,将对象压栈,而operator new的主要任务是搜索合适的堆内存,为堆对象分配空间,
    

 禁止产生栈对象: 

     前面已经提到了,创建栈对象时会移动栈顶指针以“挪出”适当大小的空间,然后在这个空间上直接调用对应的构造函数以形成一个栈对象,而当函数返回时,会调用其析构函数释放这个对象,然后再调整栈顶指针收回那块栈内存。在这个过程中是不需要operator new/delete操作的,所以将operator new/delete设置为private不能达到目的。当然从上面的叙述中,你也许已经想到了:将构造函数或析构函数设为私有的,这样系统就不能调用构造/析构函数了,当然就不能在栈中生成

默认参数不参与动态绑定(多态),与虚函数无关。而是编译时确定 


static、const、const static

1. class Test   
2. {   
3. public:   
4.       Test():a(0){}   
5.       enum {size1=100,size2=200};   
6. private:   
7.       const int a;//只能在构造函数初始化列表中初始化   
8.        static int b;//在类的实现文件中定义并初始化   
9.       const static int c;//与 static const int c;相同。   
10. };   
11.    
12. int Test::b=0;//static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对
象。   
13. cosnt int Test::c=0;//注意:给静态成员变量赋值时,不需要加static修饰符。但要加
cosnt 

抱歉!评论已关闭.