使用没有名字的shared_ptr ?!

时间:2013-04-06 18:47:50

标签: c++

我正在阅读“Game Coding Complete”一书,它基本上是关于游戏引擎的概念。 关于资源缓存的部分有一些我不太了解的代码。

extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();

其中CreateWAVResourceLoader()看起来像

    shared_ptr<IResourceLoader> CreateWAVResourceLoader()
{
    return shared_ptr<IResourceLoader>(GCC_NEW WaveResourceLoader());
}

然后作者注册了wave资源加载器

m_ResCache->RegisterLoader(CreateWAVResourceLoader());

对我来说,行extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();有点令人困惑,因为我正在调用返回shared_ptr的函数,但是如何在没有名称的情况下使用该指针呢?我很确定这是我缺乏C ++的经验,所以请赐教。 :)

谢谢!

3 个答案:

答案 0 :(得分:3)

该行一个函数声明。它名为CreateWAVResourceLoader,没有参数,并返回shared_ptr<IResourceLoader>

当你说:

m_ResCache->RegisterLoader(CreateWAVResourceLoader());

那是你打电话的时候。它将从函数返回的临时共享指针传递给RegisterLoader

答案 1 :(得分:2)

  

但是如何在没有名字的情况下使用该指针?

您不是将使用shared_ptr的人,对象m_ResCache将是。我假设该对象具有处理资源的接口,并在内部跟踪shared_ptrs。

即。它是这样的:

class foo {
  public:
    RegisterLoader(shared_ptr<IResourceLoader> ptr) { internal_ptr = ptr; }

    DoSomethingWithLoader() { /* ... */ }
  private:
    shared_ptr<IResourceLoader> internal_ptr;
};

答案 2 :(得分:0)

extern shared_ptr<IResourceLoader> CreateWAVResourceLoader();

只是意味着该函数将在另一个文件(extern)中实现,并且它将返回shared_ptr。整行只是一个函数声明和

shared_ptr<IResourceLoader> CreateWAVResourceLoader()
{
    return shared_ptr<IResourceLoader>(GCC_NEW WaveResourceLoader());
}

只是该函数的一个实现。