我明白如何使用weak_ptr和shared_ptr 。 通过计算对象中引用的数量,我明白shared_ptr是如何工作的。 weak_ptr如何工作的? 我试着通过boost源代码阅读,并且我不太熟悉提高,以了解它使用的所有东西。 谢谢。
这个问题也适用于boost::function和std::tr1::function 。 std::function不相等: #include <functional> void foo() { } int main() { std::function<void()> f(foo), g(foo); bool are_equal(f == g); // Error: f and g are not equality comparable } 在C ++ 11中, operator==和operator!= overload是不存在的。 在早期的C ++ 11草案中,重载被声明为删除(N3092§20.8.14.2): // deleted overloads close possible hole in the type system 它没有说出“types系统中可能存在的漏洞”是什么。 在TR1和Boost中,重载是声明的,但没有定义。 TR1规范注释(N1836§3.7.2.6): 这些成员函数应该是未定义的。 [ 注意:类似布尔的转换会打开一个漏洞,通过==或!=来比较两个函数实例。 这些未定义的void操作符closures了漏洞,并确保编译时错误。 – […]
对于一个类,我想在一个存储std::function对象的map存储一些指向同一类的成员函数的函数指针。 但是这个代码我一开始就失败了: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } }; 我收到error C2064: term does not evaluate to a function taking 0 arguments在xxcallobj error C2064: term does not evaluate to a function taking 0 arguments结合一些奇怪的模板实例化错误。 目前我正在使用Visual Studio 2010/2011在Windows 8上工作,在VS 7上使用VS10工作也会失败。 错误必须基于一些奇怪的C ++规则,我不遵循。 编辑:我不使用提升。 这是MS编译器中集成的C ++ 11。
我在阅读Boost.Asio示例时遇到了enable_shared_from_this ,在阅读完文档之后,我仍然不知道如何正确使用它。 有人可以给我一个例子和/或解释什么时候使用这个类是有道理的。