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
那么怎样禁止产生堆对象了?我们已经知道,产生堆对象的唯一方法是使用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
相关文章推荐
- C++内存对象大会战 禁止产生堆对象 禁止产生栈对象
- 《More Effective C++》学习心得(八) 要求(或禁止)对象产生于heap中
- C++中要求(或禁止)对象产生于heap中
- more effective C++设计模式 要求(或禁止)对象产生于heap中
- C++中禁止产生非堆对象
- More Effective C++----(27)要求或禁止在堆中产生对象
- More Effective C++ 阅读笔记(十三)--要求或禁止在堆中产生对象
- C++——内存对象 禁止产生堆对象 禁止产生栈对象
- More Effective C++ 条款27 要求(禁止)对象产生与heap之中
- More Effective C++(条款27:要求(或禁止)对象产生于heap之中)
- 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用
- Java函数传递对象与C++传递引用
- 比较java和C++的面向对象语法
- Java与C++程序在运行时测试对象的类型
- 交换连个对象的值(C/C++?JAVA)
- C++与Java中对象销毁及内存泄露
- 要求或禁止在堆中产生对象
- java中的“+”运算符,产生新对象问题。(非常好的面试题!)
- 禁止或要求对象产生于堆中
- 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用