您的位置:首页 > 编程语言 > C语言/C++

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

2014-09-27 08:44 225 查看
禁止产生堆对象: 
     那么怎样禁止产生堆对象了?我们已经知道,产生堆对象的唯一方法是使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: