Özel belgeyi temsil eden Document
sınıfı güvenli bir iş parçacığım var. Alıcının durumunu değiştirmek için getters (const işlevleri) ve setters var. Tüm bu işlevler, yöntem tamamen uygulanıncaya kadar belgenin değiştirilmeyeceğini garanti etmek için mutex korumalıdır. Muteks-kilitleme işlevi const olarak işaretlenebilir
Ama nedeniyle QMutex
kullanım
mutable
kullanımı olmadan
const
olarak devlet erişilen işlev işaretleyemiyorsunuz.
QMutex
'u yakalamak, durumunu değiştirir.
Bu kod doğru mu, yoksa daha hoş bir şekilde yazılabilir mi? Halatsız mutable
kullanımı.
class Document
{
// This method should be const: it changes only mutex
// and don't touch document state
bool IsCorrect() const;
...
mutable QMutex m_lock;
};
bool Document::IsCorrect() const
{
// Capturing mutex object change it!
QMutexLocker lock(&m_lock);
... Const-aware code
bool result = (m_context != NULL);
...
return result;
}
Bu "mutable" kullanımı "hacky" değil ... tam olarak ne 'mutable' için var (ama münhasıran değil - örneğin, önbelleğe alma sonuçları, enstrümantasyon eşit derecede geçerli kullanımlar). –
Başka bir "mutable" örneği, okunurken yenilenebilen bir önbellek (harici durumun dahili gösterimi) olabilir, bu nedenle bir okuma işlevi const ise bile, önbellek değişebilir, ancak bu durum, nesne değişti. – stefaanv
@TonyD Şefim şöyle bir şey söylüyor: "const işlevi bir şeyi değiştirmemeli - ve mutex Belge durumunun bir parçası, onu değiştirerek örtülü olarak karıştırıyor". Ona mantıksal ve bitlenmezlik hakkında açıklama yapmalı mıyım? – eraxillan