我希望有人可以帮我解决这个问题。这里的问题。 我有一个共享库(.so,.dll,.dynlib)。在该库中,存在某种创建对象的工厂类。例如,我的方法看起来像这样:
class RenderSystem {
public:
int createTexture(Texture** texture, ...);
....
}
createTexture
类中的RenderSystem
方法如下所示:
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;
}
希望我能描述一下这个问题。
答案 0 :(得分:3)
传递参考是否安全??
是的,使用您描述的技术并不罕见,通常称为按引用返回(或 call-by-reference )。
对于某些系统和约定,引用参数的返回位于方法签名的末尾 - 但这是一个偏好,并没什么区别。
...或者我是否必须更改方法的返回值...?
需要更改返回类型的替代方法是:
将返回类型扩展为某种std::tuple
或std::pair
。
最好的方法是返回std::shared_ptr
并在错误情况下抛出异常。
替代方案需要改变回报类型,这不是你要求的,而是值得一提的替代方案。