[英]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::tuple
或std::pair
。
可能最好的方法是返回std::shared_ptr
并在错误条件下抛出异常。
替代方案需要改变返回类型,这不是你要求的,而是值得一提的替代方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.