C++两种方式创建对象
来源:互联网 发布:新浪微博数据 编辑:程序博客网 时间:2024/05/23 14:01
C++两种方式创建对象(new和申明)
分类: C/C++/VC2011-11-13 13:09 281人阅读 评论(0) 收藏 举报
环境: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_H
- class 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();
- <span style="color:#ff0000;">private:
- ~T();
- </span> int i;
- };
- #endif
- #include "head.h"
- #include <iostream>
- using namespace std;
- int main(void){
- <span style="color:#ff0000;"> T*t1;
- t1= new T;
- </span>
- t1->Test();
- t1->Delete();
- return0;
- }
注意:这里要写一个成员函数对new的对象进行delete。
问题2:
- #include <iostream>
- using namespace std;
- #ifndef HEAD_H
- #define HEAD_H
- class T{
- public:
- T();
- ~T();
- voidTest();
- <span style="color:#ff0000;">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;
- }
- </span>int i;
- };
- #endif
- #include "head.h"
- #include <iostream>
- using namespace std;
- int main(void){
- <span style="color:#ff0000;">Tt;
- </span>
- t.Test();
- return0;
- }
- C++——对象创建的两种方式
- C/C++创建对象的两种方式
- 创建XMLHttpRequest对象的两种方式
- Javascript创建对象的两种方式
- c++创建对象的两种方式
- C++两种方式创建对象
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- javascript创建对象的两种方式
- c++创建对象的两种方式
- 创建XMLHttpRequest对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- c++创建对象的两种方式
- 浅谈创建对象的两种方式
- c++创建对象的两种方式
- C++Primer——迭代器iterator(1)
- 数论 hdu_1239
- C++Primer——string
- Linux 自学笔记(六)——RPM 管理
- 关于extern “C”
- C++两种方式创建对象
- 进程控制
- Shell编程基础 简介
- 如何在richEdit里面特殊显示某些字符
- Firemonkey开发说明,Deploying to Android
- 用C++Builder写C/S遇到的问题
- C语言中可变参数的用法
- C++派生类--基类构造函数,内嵌对象(子对象)的执行顺序
- 继承与派生