草庐IT

weakly-referenced

全部标签

c++ - 可以将过期的weak_ptr 与未初始化的weak_ptr 区分开来吗?

例如:std::weak_ptrwp1(std::make_shared());std::weak_ptrwp2;assert(PointsToValidOrExpiredObject(wp1));assert(!PointsToValidOrExpiredObject(wp2));这样的功能可能吗?用例:类的构造函数采用std::weak_ptr作为依赖。传递过期对象是可以的(可能在某些工作流中发生),但传递null意味着程序员忘记了一些东西。作为构造函数参数验证的一部分,我想对此进行测试。 最佳答案 std::weak_ptr:

c++ - 关于weak_ptr的线程安全

std::shared_ptrg_s=std::make_shared(1);voidf1(){std::shared_ptrl_s1=g_s;//readg_s}voidf2(){std::shared_ptrl_s2=std::make_shared(3);std::threadth(f1);th.detach();g_s=l_s2;//writeg_s}关于上面的代码,我知道读取和写入相同shared_ptr的不同线程会导致竞争条件。但是weak_ptr呢?下面的代码中是否有任何竞争条件?(我的平台是微软VS2013。)std::weak_ptrg_w;voidf3(){std:

c++ - 关于weak_ptr的线程安全

std::shared_ptrg_s=std::make_shared(1);voidf1(){std::shared_ptrl_s1=g_s;//readg_s}voidf2(){std::shared_ptrl_s2=std::make_shared(3);std::threadth(f1);th.detach();g_s=l_s2;//writeg_s}关于上面的代码,我知道读取和写入相同shared_ptr的不同线程会导致竞争条件。但是weak_ptr呢?下面的代码中是否有任何竞争条件?(我的平台是微软VS2013。)std::weak_ptrg_w;voidf3(){std:

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - 为什么我不能将 nullptr 转换为 weak_ptr<>

classMyClass{public:MyClass(std::weak_ptrparent){}}我想这样做:autonewInstance=std::make_shared(nullptr);或者weak_ptr参数的默认值为null,如:voidfunction(intarg,std::weak_ptrobj=nullptr);但是,我需要这样做:autonewInstance=std::make_shared(std::shared_ptr(nullptr));这是为什么呢? 最佳答案 因为weak_ptr在概念上只能从另

c++ - 为什么我不能将 nullptr 转换为 weak_ptr<>

classMyClass{public:MyClass(std::weak_ptrparent){}}我想这样做:autonewInstance=std::make_shared(nullptr);或者weak_ptr参数的默认值为null,如:voidfunction(intarg,std::weak_ptrobj=nullptr);但是,我需要这样做:autonewInstance=std::make_shared(std::shared_ptr(nullptr));这是为什么呢? 最佳答案 因为weak_ptr在概念上只能从另

c++ - 为什么 shared_ptr 引用计数对象也需要跟踪指向该对象的 weak_ptr 上的数字?

您好,我正在阅读thisdocument和其他一些关于C++的shared_ptr的文档,他们似乎都建议除了指向分配对象的shared_ptr的数量之外,引用计数对象必须跟踪如何许多weak_ptr指针也指向该对象。我的问题是为什么?据我了解,weak_ptr是非拥有的,因此如果指向对象的shared_ptr计数达到零,则可以删除该对象。这就是为什么有时我们需要使用expired检查weak_ptr指向的对象的可用性。您能解释一下需要跟踪weak_ptr数量的原因吗?为什么我们在这里需要弱计数? 最佳答案 std::weak_ptr

c++ - 为什么 shared_ptr 引用计数对象也需要跟踪指向该对象的 weak_ptr 上的数字?

您好,我正在阅读thisdocument和其他一些关于C++的shared_ptr的文档,他们似乎都建议除了指向分配对象的shared_ptr的数量之外,引用计数对象必须跟踪如何许多weak_ptr指针也指向该对象。我的问题是为什么?据我了解,weak_ptr是非拥有的,因此如果指向对象的shared_ptr计数达到零,则可以删除该对象。这就是为什么有时我们需要使用expired检查weak_ptr指向的对象的可用性。您能解释一下需要跟踪weak_ptr数量的原因吗?为什么我们在这里需要弱计数? 最佳答案 std::weak_ptr

c++ - 错误 LNK2019 : unresolved external symbol _main referenced in function ___tmainCRTStartup, 但这次不是 Windows/控制台问题!

所以,臭名昭著的错误又回来了。该项目提示它找不到main()方法(这就是错误的意思,对)。但是我确实有一个主项目,而且我的项目应该是一个控制台项目。它以前有效,所以我知道不是那样。此外,该项目有太多的类和文件,我无法将它们全部发布,所以我会根据您的要求发布您需要的任何类。这是VisualStudio2010上的C++、OpenGL和SDL游戏。这不是任何库的问题,因为它在突然莫名其妙地显示此链接器错误之前运行良好。编辑:main()方法:intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_D