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