我正在尝试使用地图(一组键值条目)来合并案例.到目前为止,我有两个类别(见下文).假设存在更多,它们是什么?
请将每个答案限制为一个独特的类别并举一个例子.
属性值(如bean)
age -> 30
sex -> male
loc -> calgary
Run Code Online (Sandbox Code Playgroud)
存在,具有O(1)性能
peter -> 1
john -> 1
paul -> 1
Run Code Online (Sandbox Code Playgroud) 我有一个基类Token.它没有实现,因此充当标记接口.这是调用者将使用的类型.
{
Token t = startJob(jobId);
// ... (tasks)
// t falls out of scope, destructors are called
}
Run Code Online (Sandbox Code Playgroud)
我有一个派生类,LockToken.它包裹着互斥锁并确保在施工期间获得锁定并在破坏期间释放锁定.startJob方法是一种工厂方法,它决定是返回令牌(不提供锁定)还是返回LockToken(提供锁定).
Token startJob(int jobId)
{
return (jobId>0) ? LockToken() : Token() ;
}
Run Code Online (Sandbox Code Playgroud)
当startJob返回一个基本实例(令牌)时,一切都运行良好.在另一种情况下(jobId> 0),有一个由派生实例组成的副本到基础实例.在其他工作中,一个不同的Token是从LockToken复制构造的,并且原始的LockToken过早地超出了范围,在startJob的范围内释放了锁.
我怎么摆脱这个?我可以更改startJob以使其返回或输出真正的协变令牌(意味着它可能是一个LockToken)吗?