C++两种方式创建对象(new和申明)
来源:互联网 发布:好的配音软件 编辑:程序博客网 时间:2024/05/21 15:50
环境:VS2010
问题:
1.如何让一个类的对象只能够在堆上创建(即使用new创建,如:T *p=new T;), 而不能在栈上创建(即直接申明方式,如:T t;);
2.如何让一个类的对象只能够在栈上创建(即直接申明方式,如:T t;),而不能在堆上创建(即使用new方式,如:T *p=new T;);
解决:
1.只能使用new创建,而不能使用申明明方式,只需要把类T的析构函数设为私有即可。
2.只能使用申明方式,而不能使用new新建,只需要把new和delete运算符设为私有,并重载这两个运算符。
代码:(只给出头文件和主函数)
问题1:
#include <iostream> using namespace std; #ifndef HEAD_H#define HEAD_Hclass T{public: void*operator new(size_t s){ void*p = new char[s]; cout<<"调用函数new(size_t s)分配空间,空间为"<<s<<endl; returnp;} void operator delete(void *p){ delete(p); cout<<"调用函数delete(void *p)释放空间"<<endl;}void Test();void Delete();T();private: ~T(); int i;};#endif #include "head.h"#include <iostream> using namespace std; int main(void){ T*t1; t1= new T; t1->Test(); t1->Delete(); return0;}
注意:这里要写一个成员函数对new的对象进行delete。
问题2:
#include <iostream> using namespace std; #ifndef HEAD_H#define HEAD_Hclass T{public: T(); ~T(); voidTest(); private:void *operatornew(size_t s){ void *p = new char[s]; cout<<"调用函数new(size_t s)分配空间,空间为"<<s<<endl; return p;}void operatordelete(void *p){ delete (p); cout<<"调用函数delete(void *p)释放空间"<<endl;} int i;};#endif #include "head.h"#include <iostream> using namespace std; int main(void){ Tt; t.Test(); return0;}
- C++两种方式创建对象(new和申明)
- C++——对象创建的两种方式
- C/C++创建对象的两种方式
- C++ 创建对象的两种方法 new和不new
- C++创建对象的两种方法(C++用new和不用new创建类对象)
- 创建XMLHttpRequest对象的两种方式
- Javascript创建对象的两种方式
- c++创建对象的两种方式
- C++两种方式创建对象
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- javascript创建对象的两种方式
- c++创建对象的两种方式
- 创建XMLHttpRequest对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- HTTP lessonThere
- Java中日期的简单处理
- Red5的安装配置以及AS3连接red5简单示例
- 20款最新且极具创意的jQuery插件
- oracle之round函数使用
- C++两种方式创建对象(new和申明)
- #ifdef _DEBUG的理解 (C language)
- Android Toast用法详解(各种自定义Toast)
- Java软件架构师所要需的东西
- java.io包详细解说
- IT界名人你认识几个?
- C#中sql备份与还原
- 一个老程序员说的心里话
- 一个java IO的例子