olur edildiğinde aşağıdaki üye fonksiyonlara sahiptir:dönüş değeri için kopya yapıcısı
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
return m_person;
}
RAIIMutex
bir Muteksleri recieves ve yıkıcı yapıcı ve bültenleri bunu kilitler bir yardımcı sınıftır.
m_person
, Person
tipindedir (boyut olarak çok küçük bir şey). Diğer üyelerde bulunan diğer işlevler bu üyeyi değiştirebilir.
Ben değeriyle m_person
dönmek istiyorum (bir kopyasını döndürmek) ve tabii ki ben kilidi ekledik böylece karşılığında kopyalanan esnada m_person
başka bir iplik değiştirilmesini durumu önlemek istiyor.
Ama önce ne olur? Derleyici ilk olarak m_person
'un bir kopyasını oluşturur mu yoksa ilk önce myLock
destructor'ını arar mı?
böyle bir şey yaparak Teorik olarak tefriş çözülebilir:
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
Person tmp = m_person;
return tmp;
}
Ama sorunun cevabını bilmeden ilgileniyorum.
sayesinde yerel nesnelerin
[OT] Sen '[' std :: lock_gurad'] (http://en.cppreference.com/w/cpp/thread/lock_guard) – NathanOliver
kopya yapıcısı olarak adlandırılan olmayabilir ile RAIIMutex' yerini alabilir [kopya elence] nedeniyle (https://en.wikipedia.org/wiki/Copy_elision). –
@JoachimPileborg Bu 'm_person' bir sınıf üyesi değişkeni gibi görünüyor şüphelidir. – NathanOliver