问题标签 [scoped-ptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost scoped_ptr/shared_ptr 持有与指向的对象大小不同的内存块
实际上,在写这个问题时,我想到了另一个更短的问题,所以我先问一下:
第一个问题(较短):
我有一个以这种方式定义的结构的标题:
这个语法的含义是什么?(注意结构名称和右大括号后名称的区别)
第二个问题(更长):
我有一个来自硬件制造商的代码示例,展示了如何正确初始化我使用的硬件。在代码中,制造商使用原始指针,而在我的应用程序中,我更喜欢使用 boost scoped_ptr 或 shared_ptr。问题是我要分配的内存块的大小与常规 new ObjectType 分配的大小不同;
这是我从制造商网站获得的简短版本:
这就是我想要得到的:
以下是该结构的外观:
问题是:如何让这个功能与 scoped_ptr/shared_ptr 一起使用?另请注意,在代码片段中,内存块的删除是通过 delete[] 而不是 delete 完成的。我需要使用 scoped_array 吗?如果是这样,如何访问结构字段?
如果有人觉得它有帮助,制造商网站上有一个完整的例子:
boost - scoped_ptr 用于双指针
有没有一种优雅的方式来升级到使用 boost 的 scoped_ptr 或 scoped_array 截断的以下代码?
c++ - 什么时候一个类型被认为是完整的?
考虑以下代码片段。boost::scoped_ptr 的析构函数在 main 函数结束时被调用。析构函数使用 boost::checked_delete 来释放封装的 Widget 指针。
我预计此代码无法编译,因为在scoped_ptr<Widget>
调用析构函数时类 Widget 不完整。sizeof(Widget)
但是,这可以在 g++ 4.8 和 Visual Studio 2010 上干净地编译。请注意主函数中带有表达式的注释语句。如果我取消注释它,它将无法编译,这意味着Widget
此时必须是不完整的。
这种行为的正确解释是什么?
编辑:一些答案(现已删除)指向未定义的行为,但我预计在scoped_ptr
析构函数中使用 checked_delete 会导致编译失败。FWIW,我正在使用 Boost 1.55。
c++ - scoped_ptr 调用成员函数抛出错误
我目前正在阅读 Accelerated C++ ch13,并想通过 boost scoped_ptr 执行书中给出的示例程序,但遇到了错误。
愿你们保释我。
**
**
原始示例代码如下所示,它完美无缺
现在使用 scoped_ptr MY VERSION
c++ - scoped_ptr 和 c++ 标准库
scoped_ptr 不是标准库的一部分有什么原因吗?未来有什么计划吗?在某些情况下,我更喜欢使用 scoped_ptr 而不是 unique_ptr,因为它不像后者那样不可移动。
c++ - 如何在 C++ 中创建 scoped_ptr 的映射
我有以下代码,第 2 行在编译期间给了我一个错误。是否可以创建范围指针的映射,或者我是否必须使用共享指针?
错误:
c++ - 如何获取 scoped_ptr 的地址?
我正在研究智能指针,特别是scoped_ptr
. 我阅读了有关运营商*
和->
. 我试图运行这段代码:
结果是:
那是不正确的。
我如何使用->
运营商来获取正确的地址?
c++ - 是否有内置深度复制功能的作用域 ptr?
据我了解,如果我有一个具有 boost::scoped_ptr 成员变量的类,并且如果我要复制该类的一个实例并希望新实例的 scoped_ptr 成员指向第一个所指向的实例,我必须实现一个自定义复制构造函数(和赋值运算符),并对 scoped_ptr 指向的任何内容进行显式深度复制。如果智能指针类型有一个复制构造函数来做这件事,那就太好了。
c++ boost / stl库中是否没有类似的智能指针已经内置了深拷贝功能,所以当智能指针被复制时,它指向的对象也会被复制?至少作为一种选择?
(如果有这样的指针,在我的情况下,指针将不得不更多地了解它应该如何创建新对象,因为我指向的对象属于多态类,具有虚拟 Clone() 函数。如果智能指针不能'没有隐含地弄清楚如何进行深度复制,客户端代码可能已经提供了一个函数指针或指向克隆函数或任何应该使用的工厂创建函数的东西。我猜这个新对象如何创建的复杂性可能是一个毕竟没有指针具有深层复制功能的原因..?)
c++ - 如何动态转换 boost::scoped_ptr?
我很惊讶编译器拒绝编译这种代码:
为什么这是不可能的?最好的方法是什么?
我找到了这个解决方案:
有没有办法只使用智能指针?
注意:出于兼容性原因,我不使用 C++11。
c++ - 范围指针和重置
我正在玩提升范围的指针,但我不明白这种行为:
我得到以下输出:
复位函数不应该改变p指向的地址吗?如果使用范围数组而不是范围指针并打印上面代码中第一个元素指向的地址,就会出现这种情况。