编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
2015-08-06 19:47
603 查看
#include<iostream>
using namespace std;
//只能在堆上分配内存
class HeapOnly
{
public:
HeapOnly()
{
cout<<"Construct."<<endl;
}
//pseudo dtor,注意为const,因为const也可能需要被销毁
void destory()
const
{
delete this;
}
//声明为private也是可以的,但阻碍了继承,并且即便声明为protected还是不能把它包含于对象,而使能用一个它的指针替代它
protected:
~HeapOnly() //客户定义HeapOnly
h;时由于稍后要调用dctor,不合法
{
}
};
//只能在栈上分配空间
class StackOnly
{
public:
StackOnly()
{
}
~StackOnly()
{
}
[b]private[/b]:
//将new操作符私有化,在外面无法调用,因为new表达式总是调用operator new,声明为static,只为类服务,不为具体对象服务
//注意还得把将delete与new置于同一访问层次,并且针对数组的new delete也最好一并定义为private
static void* operator new(size_t size);
static void operator delete(void
*ptr);
static void* operator new[] (size_t size);
static void operator delete[]
(void *ptr);
};
int main()
{
HeapOnly *hO=new HeapOnly();
hO->destory();
//HeapOnly he; //编译错误:HeapOnly::~HeapOnly”: 无法访问 private 成员(在“HeapOnly”类中声明),所以不能通过栈来分配这个对象的空间
StackOnly so;
//StackOnly *st=new StackOnly(); //StackOnly::operator new”: 无法访问 private 成员(在“StackOnly”类中声明)
}
using namespace std;
//只能在堆上分配内存
class HeapOnly
{
public:
HeapOnly()
{
cout<<"Construct."<<endl;
}
//pseudo dtor,注意为const,因为const也可能需要被销毁
void destory()
const
{
delete this;
}
//声明为private也是可以的,但阻碍了继承,并且即便声明为protected还是不能把它包含于对象,而使能用一个它的指针替代它
protected:
~HeapOnly() //客户定义HeapOnly
h;时由于稍后要调用dctor,不合法
{
}
};
//只能在栈上分配空间
class StackOnly
{
public:
StackOnly()
{
}
~StackOnly()
{
}
[b]private[/b]:
//将new操作符私有化,在外面无法调用,因为new表达式总是调用operator new,声明为static,只为类服务,不为具体对象服务
//注意还得把将delete与new置于同一访问层次,并且针对数组的new delete也最好一并定义为private
static void* operator new(size_t size);
static void operator delete(void
*ptr);
static void* operator new[] (size_t size);
static void operator delete[]
(void *ptr);
};
int main()
{
HeapOnly *hO=new HeapOnly();
hO->destory();
//HeapOnly he; //编译错误:HeapOnly::~HeapOnly”: 无法访问 private 成员(在“HeapOnly”类中声明),所以不能通过栈来分配这个对象的空间
StackOnly so;
//StackOnly *st=new StackOnly(); //StackOnly::operator new”: 无法访问 private 成员(在“StackOnly”类中声明)
}
相关文章推荐
- C/C++中sscanf && sprintf()
- C/C++ 语言中 sprintf() 函数的用法
- C++ STL数值操作函数说明
- Box2D C++教程-设置世界(World)7
- c++类实现基本的6种排序算法
- C++ std::tr1::shared_ptr使用说明
- C语言:使用命令行参数用字符串读取流和输出流进行文本文件的复制
- 冒泡排序 选择排序 快速排序(C语言)
- C语言:字符串输出流输出文件中的数据。
- C语言:字符串读取流读取文件中的数据
- C语言:用字符读取流和输出流来读写入数据。(文本文件)
- C++ 11新特性笔记-1: 保证稳定性和兼容性
- C++_运算符重载_前缀自增与后缀自增
- TinyXML:一个优秀的C++ XML解析器
- 线型表的C++实现
- C++ Builder 将数据库数据导出到Excel中总结
- C++ Builder 基础知识总结中
- C++异常处理:抛出异常throw,捕获异常catch(...)
- C++之旅
- cppcheck值得注意的一些筛选项