【发布时间】:2011-04-30 15:30:39
【问题描述】:
目前我想在多线程环境中制作包装访问器类。这个类的目的很简单——在它的构造上获取一个锁,在它的销毁上释放一个锁。除此之外,它与普通指针相同。此外,我想防止它在堆区创建,以确保最终释放锁。
逆向相当简单(使用工厂方法的私有构造函数),但我不知道只有堆栈的变量是可能的。到底有没有?
【问题讨论】:
-
我认为这样的事情是不必要的。每个体面的程序员都应该知道使用 new/delete 需要自己承担风险。如果程序员想要这个对象在堆上并抛弃类存在的意义,让他们。
-
你要求的是不可能和不必要的。如果一个不称职的程序员使用您的代码,他们将设法破坏自己的应用程序无论如何。如果他们有能力,那么他们会按照预期的方式分配你的锁对象:在作用域上下文中。
-
“保护墨菲,而不是马基雅维利” - Herb Sutter
-
如果您还没有想到有人想要
unique_ptr<MyLock> lock(new MyLock())的正当理由怎么办?这是一个具有有趣的附加功能的锁,可以在函数和范围之间移动。糟糕,您只是无缘无故地先发制人地搞砸了他们。