繁体   English   中英

初始化由成员函数参数传递的shared_ptr

[英]Initialize shared_ptr passed by member function parameter

我希望有人能帮我解决这个问题。 这里的问题。 我有一个共享库(.so,.dll,.dynlib)。 在该库中,存在某种创建对象的工厂类。 例如,我的方法看起来像这样:

class RenderSystem {
    public:
        int createTexture(Texture** texture, ...);
        ....
}

RenderSystem类中的createTexture方法如下所示:

int createTexture(Texture** texture, ...) {
    ....
    *texture = new ...
    return someErrorCode;
}

它创建了Texture实例并将指针传递给texture参数。 我们知道在共享库中创建的实例必须在同一个库中销毁。 所以我有删除/破坏这些纹理的方法。

我喜欢将shared_ptr用于所有这些,但我必须将返回值保持为整数。 返回std::shared_ptr<Texture>而不更改方法的返回类型的正确方法是什么。 传递对std::shared_ptr<Texture>的引用是否安全,还是必须将方法的返回值更改为std::shared_ptr<Texutre> 所以这样做是可以的:

int createTexture(std::shared_ptr<Texture>& texture, ...) {
    ....
    texture = std::shared_ptr<....>(...) or std::make_shared<...>(..);
    return someErrorCode;
}

希望我能描述一下这个问题。

通过引用是否安全......?

是的,使用您描述的技术并不罕见,通常称为按引用返回 (或通过引用 调用 )。

对于某些系统和约定,引用参数的返回位于方法签名的末尾 - 但这是一个首选项,并没有什么区别。

...或者我是否必须更改方法的返回值...?

需要更改返回类型的替代方法是:

  • 将返回类型扩展为某种std::tuplestd::pair

  • 可能最好的方法是返回std::shared_ptr并在错误条件下抛出异常。

替代方案需要改变返回类型,这不是你要求的,而是值得一提的替代方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM