boost::weak_ptr
必定总是通过 boost::shared_ptr
来初始化的。一旦初始化之后,它基本上只提供一个有用的方法: lock()
。此方法返回的 与用来初始化弱指针的共享指针共享所有权。 如果这个共享指针不含有任何对象,返回的共享指针也将是空的。
上例的 main()
函数中,通过 Windows API 创建了2个线程。 于是乎,该例只能在 Windows 平台上编译运行。
一旦程序启动之后,reset()
和 就都开始执行了。 不过执行顺序是不确定的。 这就导致了一个潜在的问题:reset()
线程在销毁对象的时候print()
线程可能正在访问它。
弱指针本身对于对象的生存期没有任何影响。 返回一个共享指针,print()
函数就可以安全的访问对象了。 这就保证了——即使另一个线程要释放对象——由于我们有返回的共享指针,对象依然存在。