我知道全局/外部变量很糟糕,但仍然不确定确切的原因。
但在某些情况下,如果不使用extern,我就无法解决这个问题。
例如,在我正在开发的服务器应用程序中,我需要每个类、每个源文件来访问所有客户端对象的列表。这样我就可以在需要的时候向该客户端发送数据包。
另外,我需要声明内存池对象,以提高分配/释放重叠结构的性能。(在这种情况下,我不能使用智能指针,因为我必须经常释放内存(。但很明显,必须只有一个内存池对象,所以我必须将其声明为gloabl/extern。
我该如何处理这个问题?
我应该在每个类中声明shared_ptr还是原始指针,并在构造类时传递对象的指针吗?
Singleton可以提供帮助。有一个简单的例子:
static MemPool *MemPool::getMemPool()
{
static MemPool g_mempool = MemPool(/***...***/);
return &g_mempool;
}
Memory *MemPool::allocMemFromPool(const size_t &size)
{
//...
}
auto data = getMemPool()->allocMemFromPool(1024);