静态 shared_ptr 的底层对象的内存分配发生在哪里?
Where does the memory allocation happens for an underlying object of a static shared_ptr?
我在 GENIVI/capicxx-core-runtime 中遇到了一个名为 Runtime
的 class。下面指定的部分代码。
class Runtime {
public:
COMMONAPI_EXPORT static std::shared_ptr<Runtime> get();
COMMONAPI_EXPORT Runtime();
COMMONAPI_EXPORT virtual ~Runtime()
private:
static std::shared_ptr<Runtime> theRuntime__;
};
std::shared_ptr<Runtime> Runtime::theRuntime__ = std::make_shared<Runtime>();
std::shared_ptr<Runtime> Runtime::get() {
return theRuntime__;
}
我怀疑 theRuntime__
变量。由于shared_ptr
做堆分配,theRuntime__
变量的底层对象在这种场景下是分配在堆上还是分配在BSS/DATA段?
由 theRuntime__
管理的分配(仅供参考:您不允许使用带有双下划线的标识符;它们保留用于实现)由 std::make_shared
创建。这将动态分配内存,而不管它在哪里被调用。
theRuntime__
对象本身的存储是静态存储。
我在 GENIVI/capicxx-core-runtime 中遇到了一个名为 Runtime
的 class。下面指定的部分代码。
class Runtime {
public:
COMMONAPI_EXPORT static std::shared_ptr<Runtime> get();
COMMONAPI_EXPORT Runtime();
COMMONAPI_EXPORT virtual ~Runtime()
private:
static std::shared_ptr<Runtime> theRuntime__;
};
std::shared_ptr<Runtime> Runtime::theRuntime__ = std::make_shared<Runtime>();
std::shared_ptr<Runtime> Runtime::get() {
return theRuntime__;
}
我怀疑 theRuntime__
变量。由于shared_ptr
做堆分配,theRuntime__
变量的底层对象在这种场景下是分配在堆上还是分配在BSS/DATA段?
由 theRuntime__
管理的分配(仅供参考:您不允许使用带有双下划线的标识符;它们保留用于实现)由 std::make_shared
创建。这将动态分配内存,而不管它在哪里被调用。
theRuntime__
对象本身的存储是静态存储。