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的概念,它是不在堆上的引用,我可能应该这样问:我可以检测我的类是否在堆上创建吗?但是我认为在堆上还是在堆栈上使这个问题没有区别。