xranzei 1
xranzei
mavzermete 1
mavzermete
Hikaye Ekle

Arasındaki fark ?

  • Konuyu başlatan Konuyu başlatan ThanosIsBack
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 9
  • Görüntüleme Görüntüleme 1K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Bu kod ile

C++:
std::auto_ptr<SQLMsg> pTime(DBManager::instance().DirectQuery(sTime));
std::auto_ptr<SQLMsg> pDuration(DBManager::instance().DirectQuery(sDuration));
std::auto_ptr<SQLMsg> pReason(DBManager::instance().DirectQuery(sReason));


bu kod arasındaki fark nedir acaba ?

C++:
DBManager::instance().DirectQuery(sTime);
DBManager::instance().DirectQuery(sDuration);
DBManager::instance().DirectQuery(sReason);

hangisini kullanmam gerekir. sistem vegas'ın bakım sistemi fakat başka bir files de altaki gibi vegasın yaptığında auto_ptr olan arasındaki fark nedir ?
 
Son düzenleme:
Çözüm
auto_ptr gcc sürümü yükselince değişiyor bu mysql veri yazmada kullanılan komut
autoptr mysql sorgularında kullanılan bir komut mu :d

hangi pointerı kullanacağın sana kalmış 11 sürümünden sonra autoptr kaldırıldı deprecated bir fonksiyon yerine unique ptr geldi kısaca aynı şey fakat autoptr da bulunan bir kaç açık artık yok
auto_ptr gcc sürümü yükselince değişiyor bu mysql veri yazmada kullanılan komut
değişik kafalar.

Evet fakat verdiğim iki örnekte kullanılmış bi fileste böyle diğerinde böyle hangisi daha sağlıklı auto ptrsiz yaparsam acık olur mu

Eğer pointer öldü mü kaldı mı endişe etmek istemiyorsanız std::shared_ptr veya auto_ptr kullanmak en güzelleri olacaktır. İkisi arasındaki fark şu, auto_ptr kullandığınızda bir pointer’ın sahipliği auto_ptr ye geçer ve sahipliğini devreden pointer null olur. Yeni auto_ptr eğer bir başka auto_ptr tarafıdan sahipliği alınırsa bir önceki auto_ptr yi null eder. Bu böyle devam eder. shared_ptr ise aynı kaynağa birden fazla pointer’ın erişebilmesine olanak verir. Fakat kaynağa erişmeye çalışan hiç bir shared_ptr kalmadığı zaman shared_ptr ölür.

Yani ne diyor; eğer diyor bir pointer-değişken-işaretçi vs tanımlayacaksan ve sonrasında onu elle silmeye uğraşmak istemiyorsan auto ptr kullan. Sunucuyu ve dolayısıyla ram'i daha etkili kullanabilmek için böyle akıllı işaretçiler kullanılır.

Ancak senin attığın 3 satır için buna ihtiyaç var mı yok mu bunu belirlemen gerekiyor.

C++:
std::auto_ptr<SQLMsg> pTime(DBManager::instance().DirectQuery(sTime));
std::auto_ptr<SQLMsg> pDuration(DBManager::instance().DirectQuery(sDuration));
std::auto_ptr<SQLMsg> pReason(DBManager::instance().DirectQuery(sReason));

Burada mesela ilk satırda pTime tanımlamış, bunu kullanıyor musun? Fetch ile veri çekmede veya affectedrow ile işlenen satır var mı vs diye bakıyor musun? Yani kısacası pTime pointerını çağıran bir şey var mı yok mu? Eğer yoksa

C++:
DBManager::instance().DirectQuery(sTime);

yapman yeterlidir. Var ise auto_ptr kullanırsan kendisi siler o pointerı yok kullanmazsan;

C++:
SQLMsg *pTime = CDBManager::instance().DirectQuery(sTime);

şeklinde tanımlarsın işin bitince de elle silersin o da şöyle
C++:
        delete pMsg;
 
değişik kafalar.





Yani ne diyor; eğer diyor bir pointer-değişken-işaretçi vs tanımlayacaksan ve sonrasında onu elle silmeye uğraşmak istemiyorsan auto ptr kullan. Sunucuyu ve dolayısıyla ram'i daha etkili kullanabilmek için böyle akıllı işaretçiler kullanılır.

Ancak senin attığın 3 satır için buna ihtiyaç var mı yok mu bunu belirlemen gerekiyor.

C++:
std::auto_ptr<SQLMsg> pTime(DBManager::instance().DirectQuery(sTime));
std::auto_ptr<SQLMsg> pDuration(DBManager::instance().DirectQuery(sDuration));
std::auto_ptr<SQLMsg> pReason(DBManager::instance().DirectQuery(sReason));

Burada mesela ilk satırda pTime tanımlamış, bunu kullanıyor musun? Fetch ile veri çekmede veya affectedrow ile işlenen satır var mı vs diye bakıyor musun? Yani kısacası pTime pointerını çağıran bir şey var mı yok mu? Eğer yoksa

C++:
DBManager::instance().DirectQuery(sTime);

yapman yeterlidir. Var ise auto_ptr kullanırsan kendisi siler o pointerı yok kullanmazsan;

C++:
SQLMsg *pTime = CDBManager::instance().DirectQuery(sTime);

şeklinde tanımlarsın işin bitince de elle silersin o da şöyle
C++:
        delete pMsg;
Teşekkürler çok güzel bir acıklama
 
Son düzenleme:
auto_ptr gcc sürümü yükselince değişiyor bu mysql veri yazmada kullanılan komut
autoptr mysql sorgularında kullanılan bir komut mu :d

hangi pointerı kullanacağın sana kalmış 11 sürümünden sonra autoptr kaldırıldı deprecated bir fonksiyon yerine unique ptr geldi kısaca aynı şey fakat autoptr da bulunan bir kaç açık artık yok
 
Çözüm

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst