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

[面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)

2013-03-08 16:58 357 查看
当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。

如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。

如果在堆上分配空间,只有在delete时才会调用析构函数。

可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。
/**
//HeapOnly.cpp
#include <iostream>
using namespace std;
class HeapOnly {
public :
HeapOnly() {
cout << "Structor." << endl;
}
void destroy() const {
cout << "destructor" << endl;
delete   this;
}
private :
~HeapOnly() {}
};
int main() {
HeapOnly *p = new HeapOnly;
p->destroy();
// HeapOnly h;
// h.Output();
return   0;
}
**/
//StackOnly.cpp
#include <iostream>
using namespace std;
class StackOnly {
public :
StackOnly() {
cout << "constructor." << endl;
}
~StackOnly() {
cout << "destructor." << endl;
}
private :
static void* operator new(size_t);
};
int main() {
StackOnly s;  ///okay
//StackOnly *p = new StackOnly; ///wrong
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐