有什么方法可以检测我的类的对象是否在堆栈上创建?

rea*_*esk 5 c++ garbage-collection

现在,我需要检测是否将我的类创建为stack / global / thread_local变量,例如:

class Foo {
 public:
  Foo() {
    if(im_on_stack) {
      std::cout << "I'm on stack" << std::endl;
    } else if(im_in_global) {
      std::cout << "I'm in global" << std::endl;
    } else if(im_a_thread_local) {
      std::cout << "I'm a thread_local" << std::endl;
    } else {
      std::cout << "I'm on ohters location" << std::endl;
    }
  }
};

class Bar {
  Foo mFoo;
};

Foo gFoo;
thread_local Foo tFoo;
int main() {
  Foo lFoo;
}
Run Code Online (Sandbox Code Playgroud)

并且输出应该是:

I'm on ohters location
I'm in global
I'm a thread_local
I'm on stack
Run Code Online (Sandbox Code Playgroud)

在C ++中有什么办法可以做到这一点?

编辑:

为什么这样做:我正在编写一个垃圾回收库,并且得到了一个类,我们称之为它gc_ptr,我需要知道这gc_ptr是否是gc根(在我提到的位置上创建)(不是)是另一个班级的成员)

编辑2

根据gc root的概念,它是不在堆上的引用,我可能应该这样问:我可以检测我的类是否在堆上创建吗?但是我认为在堆上还是在堆栈上使这个问题没有区别。

Jes*_*uhl 1

简短的回答:不。标准 C++ 不支持。可能有编译器或操作系统特定的解决方案,但没有可移植的。