当前位置: 首页>>代码示例>>C++>>正文


C++ WeakRef::tombstone方法代码示例

本文整理汇总了C++中WeakRef::tombstone方法的典型用法代码示例。如果您正苦于以下问题:C++ WeakRef::tombstone方法的具体用法?C++ WeakRef::tombstone怎么用?C++ WeakRef::tombstone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WeakRef的用法示例。


在下文中一共展示了WeakRef::tombstone方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: markThru

void WeakRef::markThru()
{
    WeakRef::check();
    WRList newlive;
    // Step 2-3 of algorithm.  Mark the value and R finalizer if the
    // key is marked.
    {
	unsigned int marks_applied;
	do {
	    GCNode::Marker marker;
	    WRList::iterator lit = s_live->begin();
	    while (lit != s_live->end()) {
		WeakRef* wr = *lit++;
		RObject* key = wr->key();
		if (key->isMarked()) {
		    RObject* value = wr->value();
		    if (value)
			marker(value);
		    FunctionBase* Rfinalizer = wr->m_Rfinalizer;
		    if (Rfinalizer)
			marker(Rfinalizer);
		    wr->transfer(s_live, &newlive);
		}
	    }
	    marks_applied = marker.marksApplied();
	} while (marks_applied > 0);
    }
    // Step 4 of algorithm.  Process references with unmarked keys.
    {
	GCNode::Marker marker;
	WRList::iterator lit = s_live->begin();
	while (lit != s_live->end()) {
	    WeakRef* wr = *lit++;
	    FunctionBase* Rfinalizer = wr->m_Rfinalizer;
	    if (Rfinalizer)
		marker(Rfinalizer);
	    if (Rfinalizer || wr->m_Cfinalizer) {
		marker(wr);
		marker(wr->m_key);
		wr->m_ready_to_finalize = true;
		wr->transfer(s_live, s_f10n_pending);
	    }
	    else {
		wr->tombstone();
		// Expose to reference-counting collection:
		wr->m_self = 0;
	    }
	}
    }
    // Step 5 of algorithm.  Mark all live references with reachable keys.
    {
	GCNode::Marker marker;
	s_live->splice(s_live->end(), newlive);
	for (WRList::iterator lit = s_live->begin();
	     lit != s_live->end(); ++lit) {
	    WeakRef* wr = *lit;
	    marker(wr);
	}
    }
}
开发者ID:csilles,项目名称:cxxr,代码行数:60,代码来源:WeakRef.cpp


注:本文中的WeakRef::tombstone方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。