到底能不能编写一个只能在栈上创建对象的类解决方法

到底能不能编写一个只能在栈上创建对象的类
最近,只堆只栈的问题有频频出现,以前没有仔细考虑过只是照着前人的写便是了。

刚看了一篇博文,里面用的方法也是如此。

大致代码如下:

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,分配完了。
------解决方案--------------------
探讨
引用:

placement new 应该是全局的那个。否则就当是对象里面的那个。

C/C++ code



#include <iostream>
#include <memory>
using namespace std;

class A
{
public:

A()
:a(111)
{
cout<<"构……

------解决方案--------------------
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;
}

------解决方案--------------------
探讨

引用:

引用:
这个代码假设的东西太多了。


所以说不严谨嘛,严谨的做法就是搜索栈数据,判断this是否在栈中。


我认为这个问题这样想,有点跑偏了,我们说不能在哪里创建,指的是如若违反规定编译时会出错,可是这些个判断this的想法,是不是运行时才能做到的呢?