现在,我需要检测是否将我的类创建为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;
}

并且输出应该是:
I'm on ohters location
I'm in global
I'm a thread_local
I'm on stack

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

编辑:

为什么我要这样做:
我正在编写一个垃圾收集库,并且有一个类,我们将其称为gc_ptr,我需要知道此gc_ptr是gc根目录(在我提到的位置创建)还是不是(它是另一个的成员)类(class))

Edit2 :

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

最佳答案

简短答案:否。不支持标准C++。可能有特定于编译器或OS的解决方案,但没有可移植的。

关于c++ - 有什么方法可以检测我的类的对象是否在堆栈上创建?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58587083/

10-13 00:03