草庐IT

weak_ptr_cast

全部标签

c++ - unique_ptr 的内存占用

这个问题在这里已经有了答案:Howcanstd::unique_ptrhavenosizeoverhead?(2个答案)关闭7年前。unique_ptr实例(没有自定义删除器)是否具有与原始指针相同的内存占用空间,或者实例存储的不仅仅是指针?

c++ - 如果键已经存在,则在不删除指针的情况下将 unique_ptr 插入映射的有效方法

这个问题在这里已经有了答案:C++insertingunique_ptrinmap(3个答案)关闭3年前。简单的方法显然是std::map>mymap;autof=mymap.find(5);std::unique_ptrmyptr;if(f==mymap.end())mymap.insert({5,std::move(myptr)});但是,这看起来效率不高,因为我必须在map中找到key两次。一个检查键是否不存在,插入函数也会做同样的事情。如果我简单地使用mymap.insert({5,std::move(myptr)});然后如果pair.second返回false(key已存在

javascript - Cast vs ToXXX for v8 中的值句柄

我将V8作为辅助语言嵌入到C++程序中。我检索到Handle来自V8,当我调用类似的东西时Handlevalue_handle=context->Global()->Get(key_handle);然后我可以发现它是(比方说)一个带有value_handle->IsString()的字符串.如果是这样,我可以将其转换为Handle访问其特定于字符串的方法。但似乎有两种方法可以做到这一点:Handlestring=value_handle->ToString();或Handlestring=Handle::Cast(value_handle);但是,对于数组和函数,没有toArray()

c++ - 我可以在布局兼容的标准布局类型之间合法地重新解释_cast 吗?

我正在写一个类,假设答案是Areenumerationtypeslayoutcompatiblewiththeirunderlyingtype?是"is",是布局兼容的structkevent但使用enumclasses用于filter、flags等.为相关领域提供适当的基础类型。它也是标准布局(字段都是private并且它们本身都是标准布局,没有virtual成员,没有基类)。根据我对n3690的阅读,我可以确定我的类和structkevent具有相同的值表示,但我在标准中看不到任何允许我这样做的内容reinterpret_cast在它们之间,尽管这似乎是对“值表示”的合理解释。这在

c++ - 将 std::unique_ptr 类成员标记为 const

许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案

c++ - 从右值到右值引用的 reinterpret_cast

只是一个简单的编译测试。gcc接受以下内容,而clang和msvc拒绝它:https://godbolt.org/z/DlUasLfloattest(){returnreinterpret_cast(0x7F800000);}按照标准,哪个是正确的? 最佳答案 此reinterpret_cast表达式寻求执行的转换不在转换列表中[expr.reinterpret.cast]reinterpret_cast可以执行[expr.reinterpret.cast]/1.0x7F800000是整数类型的文字。reinterpret_cast

c++ - std::list< std::unique_ptr<T>>:传递它

假设我有一个std::list的classT:std::listl;将其传递给函数时,我会使用引用:someFunction(std::list&l)传递unique_ptr的std::list(元素)的最佳方式是什么?std::list>l;像这样:someFunction(std::unique_ptrptr)或者这个:someFunction(T*ptr)或者这个:someFunction(T&ref)例如,我如何使用std::list的back()函数来调用它?恕我直言,这些都是“有点”等同的,但我确定我在这里遗漏了一些东西。谢谢 最佳答案

c++ - 是否有像 auto_ptr 和 shared_ptr 这样不需要 C++0x 的通用智能指针?

我想要一个非引用计数的智能指针,它可以结合auto_ptr和shared_ptr的一些有用方面。我认为C++0x的unique_ptr最终是我需要的,但我需要一些可以在VisualStudio2008和Xcode(gcc4.2)上编译的东西。我需要的功能是:可在工厂方法中使用,以便在复制时转移所有权(如auto_ptr)支持release()(比如auto_ptr)可与前向声明一起使用(如shared_ptr)所以,我认为它确实是一个更好的auto_ptr。在boost或其他地方有什么可以做到这一点的吗(注意:我没有时间把我的头缠在Loki周围)?还是我应该自己动手?编辑:我刚刚阅读了

c++ - Qt 在信号/槽中使用 boost::shared_ptr

是否可能,如果可能,我如何在Qt中创建一个信号/插槽,它是对shared_ptr的const引用?我想要一个看起来像这样的信号:voidsignal(shared_ptrconst&)我知道如何在没有常量引用的情况下做到这一点,这就是类型shared_ptr但出于效率*的原因,我想避免复制。引用类型的相同语法不起作用:Q_DECLARE_METATYPE(shared_ptrconst&)qRegisterMetaTypeconst&>();许多标准API都有QStringconst&所以我认为这基本上是可能的,我只是想不出语法。**性能的最大问题不是复制时间,而是当对象被复制到每个接

c++ - 将 unique_ptr 用于所有权,否则使用原始指针?

我正在使用C++11编写一些代码。我有classX{/**/};classA{std::vectorva_x;};classB{std::vectorvb_x;std::vectorvb_a;};我的类A中“va_x”的X*指向的对象也被我的类B中的“vb_x”的X*指向。现在我想使用智能指针。对我来说,很明显B类拥有X*指向的对象的所有权(特别是因为我的A实例属于B)所以我应该为B中的X使用unique_ptr:classB{std::vector>vb_x;std::vectorvb_a;};我的问题是,我应该为A类做什么?我应该保留原始指针吗?通过这样做,在我的单元测试中,我必须