gpt4 book ai didi

c++ - 初始化成员函数参数传递的shared_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:58 25 4
gpt4 key购买 nike

我希望有人能帮助我如何处理这种情况。这里的问题。我有一个共享库(.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;
}

希望我能描述问题。

最佳答案

Is it safe to pass a reference...?

是的,使用您描述的技术并不少见,它通常被称为通过引用返回(或 call-by-reference )。

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

... or do I have to change the return value of the method...?

需要改变返回类型的替代方案是:

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

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

备选方案需要更改返回类型,这不是您所要求的,但备选方案值得一提。

关于c++ - 初始化成员函数参数传递的shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com