- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个由 shared_ptr
组成的对象结构,加上 weak_ptr
以避免循环。 原始指针是不行的,因为 boost::serialization
在通过对象跟踪作为序列化时间进行反序列化时需要恢复共享指针和弱指针。对象生命周期模式很复杂(粒子模拟)但完全可以预测。每当我使用 weak_ptr::lock()
时,我确信指针仍然有效。通常,我使用 lock().get()
,因为我只需要在很短的时间内使用该对象。
现在,lock().get()
对性能有影响,因为它会增加共享计数(在 lock()
中),然后在不久之后减少它(临时 shared_ptr
被破坏)。
这boost.devel post从 2002 年开始,在开发 weak_ptr
时,考虑了直接访问原始指针的功能(命名为 unsafe_get
或 leak
)但是从未进入实际实现。它的缺失迫使程序员在给定条件下使用次优接口(interface)。
现在的问题是如何模拟unsafe_get
/leak
,换句话说,从weak_ptr
获取原始指针,无效于程序员的风险,只读(不写)数据。我可以想象一些技巧,比如找出原始指针在 shared_ptr
中的偏移量之类的就可以完成这项工作。
我正在使用 boost::shared_ptr
,但该解决方案也适用于 c++11 的 std::shared_ptr
。
最佳答案
既然你要求一个可移植黑客。
在 boost's weak_ptr.hpp 中发现的一段有趣的代码是:
template<class T> class weak_ptr
{
...
public:
...
// Tasteless as this may seem, making all members public allows member templates
// to work in the absence of member template friends. (Matthew Langston)
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
private:
template<class Y> friend class weak_ptr;
template<class Y> friend class shared_ptr;
#endif
element_type * px; // contained pointer
boost::detail::weak_count pn; // reference counter
}; // weak_ptr
这意味着如果您使用 BOOST_NO_MEMBER_TEMPLATE_FRIENDS
选项编译 boost,您将公开访问 weak_ptr 的成员 px
,这似乎是指向元素类型的原始指针.
关于c++ - 从 weak_ptr 泄漏原始指针的可移植 hack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775800/
我希望在我的页面上使用一些吸引眼球的实验性 CSS,例如 border-radius(圆 Angular )和渐变。不幸的是,Internet Explorer 还不支持任何这些。至少 border-
我不喜欢微软的字体渲染。 我为客户创建了一个站点,我的调试列表中最后一个未选中的框是最大的。 (顺便说一句,它还没有“上线”,所以请忽略任何其他错误 - http://baked-beans.tv/b
一般情况下,当我们想在同一页面显示某个网页的内容时,我们会使用ajax请求。如果说,我使用 AJAX 请求不同域中的网页,由于跨端脚本错误,这是不允许的。但是为什么允许通过服务器端页面访问。例如我们可
在我的 css 代码中,我有一些 hack,我想影响 IE6/7 #topmenu li a.activa, #topmenu li a.activa:hover{ *background:
在过去的两个月里,我一直在试图“愚弄”safari,让它认为它正在查看服务器上的一个文件,这实际上是来自摄像机的实时视频流,根据请求使用 Gstreamer 编码和混合成一种格式这是浏览器支持的。由于
怎么说呢,相信很多考过竞赛的同学都会在平时的练习/考试中遭遇过100分但没有AC的情况,结果一看评测结果:subtask的数据点没过! 这时候就是遇到hack数据了,如果被这类数据卡住,说明你
Avast 不时出现在我的一个网站上。有点奇怪,因为我对安全性非常严格,但我检查了 index.php 文件和所有相关的包含和脚本。在我删除的“header.php”文件中发现了一些奇怪的 PHP 代
所以我使用一个程序,我在 lua 中编写 mods,lua 处于沙箱状态,这意味着大多数功能都被阻止,如 IO 和 OS,我什至不能使用 REQUIRE 添加库。我需要一个功能来解压缩我的一个 mod
在 Wiki page for Sudoku solutions ,一种解决方案声称使用“Dot Hack”。链接的 Github 页面不再可用,我在别处找不到任何关于它的信息。 这是关于什么的?它有
嗨, friend 们,是否有可能获得像这样 100% 宽度和高度的双色背景 这是示例图像: Sample Image http://www.mediaserveit.com/demo/vivek/r
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我有一个网站使用来自谷歌字体的自定义字体。在我的网站上它是正常对齐的,但在我的 android 上,源不对齐。通过各种移动技巧进行研究,我想知道它们是否真的有效,因为经过一项一项的测试,它并没有奏效。
我正在使用... background:url(menu-bg.png) repeat-x, url(spot.gif) repeat; background:url(spot.gif)\0/; 在
我尝试隐藏/显示 div“游戏类型”,但如果输入复选框在列表项中,则以下代码不会运行,我不明白为什么 是否可以在不使用 js 的情况下使用“no-game”输入禁用“pc”和“xbox”输入? inp
简单的问题:我正在 HTML5/Socket.io 中构建一个多人游戏,并使用 Phaser 作为游戏框架。我现在已经进入了为黑客行为添加预防措施的阶段了。 基本上我的问题很简单:潜在的黑客是否可以实
是否有任何方法(hack)插入 Python 函数(def)通过引用返回结果,即使对于不可变类型也是如此? 提案申请(swap as subroutine): def swap(a, b): ....
谁能帮我解决这个问题。我是 css 样式的新手。我有一个 css 文件,其中包含我要构建的 asp.net 网站的所有样式。然而,它在安装了 IE 7 的服务器上运行良好,当我尝试使用 chrome、
以下制作可变大小结构的方法有什么问题? struct tode{ int g; int *p; }; struct tode *lp = malloc(sizeof
我已经停止为不同的浏览器使用 CSS hack,而是支持“条件注释将类添加到 html 标记”方法。 这让我想到了我的问题。我如何编写这个 ie8 hack 没有 hack? .grab-cursor
这样的闭包实现有什么问题吗(从python hack中偷来的)? void function(int value) { struct closure { closure(int
我是一名优秀的程序员,十分优秀!