使用std :: shared_ptr作为Objective-C中的全局变量

伦格伦

我正在尝试从我的c.h文件与shared_ptr:s一起实现一个类。

为什么我的shared_ptr(totPtr)在方法之间不保留其值?

当我使用double而不是类时的示例代码:

#include <memory>

static std::shared_ptr<myCppClass> totPtr;
static double tot; 


@implementation ViewController


- (void) createSelf
{
    totPtr = std::make_shared<myCppClass>(5); 
    tot = 10;   
}

在createSelf之后调用此方法:

- (void)otherMethod 
{
    tot += 1; // works, tot = 11
    totPtr->doStuff(); // doesn't work, totPtr = nullptr 

}

tot2仍然具有值= 0,但是tot具有值= 10

陈柏霖

对于全局变量,您应该在中对其进行初始化+[initialize],这是一种初始化所有全局变量的线程安全方法

+ (void)initialize {
    if (self == [ViewController self]) { // need to guard it so not get called again from subclass
        totPtr = std::make_shared<MyClass>();
        tot = 10;
    }
}

如果您在中初始化它们viewDidLoad,则现在可以使用,但是当您决定拥有的多个实例时ViewController,您会发现第二次调用viewDidLoad将重置这些gloabl变量。

但是通常您不需要全局变量,您需要实例变量/属性

@interface ViewController ()
@property (nonatomic) double tot;
@end

@implementation ViewController {
    std::shared_ptr<myCppClass> _totPtr;
}

您可以viewDidLoad在其他答案对此进行详细说明。

注意:我建议将ObjC属性与C ++类(即shared_ptr)一起使用。因为每次通过属性访问它时,都需要调用setter / getter方法(可能需要复制)的开销shared_ptr,这是一个扩展操作(您应始终shared_ptr在方法参数中按引用传递,但这在ObjC中没有很好的支持)。直接访问ivar可以避免开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用std :: shared_ptr作为Objective-C中的全局变量

来自分类Dev

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

来自分类Dev

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

在Objective-C中使用全局变量

来自分类Dev

最好使用全局变量作为Javascript中的缓存?

来自分类Dev

使用std shared_ptr作为std :: map键

来自分类Dev

C ++使用指向std :: shared_ptr的Raw指针

来自分类Dev

传递 std::shared_ptr 作为对 lambda 捕获列表的引用(C++)

来自分类Dev

如何在C ++ shared_ptr中使用lambda作为删除器来创建对象缓存?

来自分类Dev

使用 shuffelArray 作为全局变量

来自分类Dev

在Objective-C块中修改全局变量

来自分类Dev

在Objective-C中对全局变量进行分类

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类Dev

C++ 中 std::shared_ptr 数组的工作原理

来自分类常见问题

在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?

来自分类Dev

C++:在原始 ptr 上使用 shared_ptr<...>

来自分类Dev

检查std :: shared_ptr中是否为null

来自分类Dev

替换std :: vector中的shared_ptr元素

来自分类Dev

在lambda中锁定std :: shared_ptr的复制操作

来自分类Dev

Bison中的std :: shared_ptr导致成员错误

来自分类Dev

替换std :: vector中的shared_ptr元素

来自分类Dev

std :: unordered_map插入错误shared_ptr C ++

来自分类Dev

std :: unordered_map插入错误shared_ptr C ++

来自分类Dev

C ++ std :: shared_ptr参考的reinterpret_cast优化

来自分类Dev

C ++ std :: shared_ptr,是否operator =重载以使用复制构造函数?

来自分类Dev

使用std :: make_shared以std :: array作为参数来初始化std :: shared_ptr

来自分类Dev

C ++ 11 std :: shared_ptr工作正常,但是boost :: shared_ptr崩溃了,这是什么原因引起的?

Related 相关文章

  1. 1

    使用std :: shared_ptr作为Objective-C中的全局变量

  2. 2

    使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

  3. 3

    使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

  4. 4

    使用* this作为std :: shared_ptr

  5. 5

    使用* this作为std :: shared_ptr

  6. 6

    在Objective-C中使用全局变量

  7. 7

    最好使用全局变量作为Javascript中的缓存?

  8. 8

    使用std shared_ptr作为std :: map键

  9. 9

    C ++使用指向std :: shared_ptr的Raw指针

  10. 10

    传递 std::shared_ptr 作为对 lambda 捕获列表的引用(C++)

  11. 11

    如何在C ++ shared_ptr中使用lambda作为删除器来创建对象缓存?

  12. 12

    使用 shuffelArray 作为全局变量

  13. 13

    在Objective-C块中修改全局变量

  14. 14

    在Objective-C中对全局变量进行分类

  15. 15

    使用std :: move与std :: shared_ptr

  16. 16

    C++ 中 std::shared_ptr 数组的工作原理

  17. 17

    在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?

  18. 18

    C++:在原始 ptr 上使用 shared_ptr<...>

  19. 19

    检查std :: shared_ptr中是否为null

  20. 20

    替换std :: vector中的shared_ptr元素

  21. 21

    在lambda中锁定std :: shared_ptr的复制操作

  22. 22

    Bison中的std :: shared_ptr导致成员错误

  23. 23

    替换std :: vector中的shared_ptr元素

  24. 24

    std :: unordered_map插入错误shared_ptr C ++

  25. 25

    std :: unordered_map插入错误shared_ptr C ++

  26. 26

    C ++ std :: shared_ptr参考的reinterpret_cast优化

  27. 27

    C ++ std :: shared_ptr,是否operator =重载以使用复制构造函数?

  28. 28

    使用std :: make_shared以std :: array作为参数来初始化std :: shared_ptr

  29. 29

    C ++ 11 std :: shared_ptr工作正常,但是boost :: shared_ptr崩溃了,这是什么原因引起的?

热门标签

归档