gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:42:05 24 4
gpt4 key购买 nike

现在我需要检测我的类是否被创建为 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 根(它是在我提到的位置)或不是(这是另一个类的成员)

编辑2:

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

最佳答案

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com