Теперь мне нужно определить, создан ли мой класс как переменная 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 (который создается в указанном месте) или нет (который является членом другого класса)
Edit2 :
В соответствии с концепцией gc root, которая является ссылкой, которой нет в куче, мне, вероятно, следует спросить следующим образом: могу ли я определить, создается ли мой класс накуча? Но я думаю, что в куче или в стеке этот вопрос не имеет значения.