到底能不能编写一个只能在栈上创建对象的类解决方法
到底能不能编写一个只能在栈上创建对象的类最近,只堆只栈的问题有频频出现,以前没有仔细考虑过只是照着前
到底能不能编写一个只能在栈上创建对象的类
最近,只堆只栈的问题有频频出现,以前没有仔细考虑过只是照着前人的写便是了。
刚看了一篇博文,里面用的方法也是如此。
大致代码如下:
C/C++ code#include <iostream>using std::cout;using std::endl;class OnlyHeap {public: OnlyHeap(); private: ~OnlyHeap();};class OnlyStack {public: OnlyStack();private: void* operator new(size_t);};OnlyStack o;/* 满足不了只能在栈上创建对象 */int main(){ return 0;}
问题是就上例和三大存储区域而言,我想问的是只在栈上创建对象的类,在数据区不是也可以创建吗?
这样一来,到底有没有既能在栈上创建又不让在数据区创建的方法?
[解决办法]这个问题我觉得是:
class OnlyHeap
{
public:
OnlyHeap();
private:
~OnlyHeap();
};
题目只要求只在堆中分配或不在堆中分配。
这样可以阻止在栈中分配,也阻止了delete函数,所以这样的解法也是不太合理的,要另外用一个函数来delete;
class OnlyStack
{
public:
OnlyStack();
private:
void* operator new(size_t);
};
这样的解法也是不能阻止在堆中分配的。
OnlyStack* ps = (OnlyStack*)malloc(sizeof(OnlyStack));
ps->OnlyStack();
OK,分配完了。
[解决办法][解决办法]VS 2008 试试这个吧。
C/C++ code#include <iostream>#include <memory>using namespace std;class A{public: A() :a(111) { cout<<"构造A"<<endl; } ~A() { cout<<"析构A"<<endl; } int a;private: void* operator new (size_t t){}; void operator delete(void *ptr){ std::cout<<"op delete"<<std::endl; }; };int main(){ A* ps = (A*)malloc(sizeof(A)); ::new(ps) A(); std::cout<<ps->a<<std::endl; ps->~A();//很奇怪这里不能单步跟踪进去。 free(ps); system("pause"); return 0;}
[解决办法]