Bir std::vector
adresini alırsam ve öğeleri ekledikten sonra yeniden ayrılırsa, adresinin değişmediğini varsayabilir miyim?Std :: vektörünün kendisi kararlı mı?
Teşekkürler.
Bir std::vector
adresini alırsam ve öğeleri ekledikten sonra yeniden ayrılırsa, adresinin değişmediğini varsayabilir miyim?Std :: vektörünün kendisi kararlı mı?
Teşekkürler.
Evet, C++ 'da bunu güvenle yapabilirsiniz. Bununla birlikte, &x[0]
numaralı ilk elemanın adresi değiştirebilir, bu adresler aynı değildir. Düzenleme: Aynı şey, diğer öğelerin adresleri için de geçerlidir. az ya da çok kararlı kalması muhtemeldir ilk elemanın adresi olup olmadığını arada
_ "ilk elemanın adresi & x [0]' değişebilir "_ hakkında nedir? & X [5]'? Bu değişmez mi (yeniden tahsisat nedeniyle geçersiz olur)? –
@ OP τνταῥεῖ OP'nin bunu ima edecek kadar akıllı olduğunu farz ediyorum. –
Gerçek cevap sadece bir kene daha geniş. Ama boşver, davayı yakaladın. –
std::vector
adresini alırsam ve öğeleri ekledikten sonra yeniden ayrılırsa, adresinin değişmediğini varsayabilir miyim?
Sen hep belli değişkenin adresi dolayı (yani dil sözdizimi engelleyen beri. Sadece ile this
yerini alamaz, mümkün değildir hiçbirini davranışını çağrılmasına, değişmez varsayalım gerçekten yapabilen keyfi bir değer).
yeniden tahsisi altta yatan veri yapıları (yani std::vector::data()
), ve bu aşırı alınan işaretçileri Bu davranışa ilişkin kararsızdır ve alınan örneğin olarak uzaklıklar ile başka adresler için (aynı değişebilir için de geçerlidir std::vector
bir davranış olduğunu ptr = &myVector[5];
).
"Bu mümkün değil, çünkü dil sözdizimi bunu engelliyor" - Bu doğru değil, C++ için özel akıllı işaretçi sınıfları veya sözdizimi eklemeleri gerektirmeyen GC kitaplıkları var ve genel olarak sözdizimi gibi bir şeyi garanti edemezsiniz yalnız. Bağımlı olduğum şey, yeniden tahsisat mı, yoksa işaretleme mi yapıyor, bilmiyorum, ama prensipte, hiç bir şey, GC'yi programın önünü durduramaz ve daha sonra yığın değiştirme işaretçi değerlerini yürümekten başka bir şey değildir. İş birliği yapmak için derleyiciyi almak. http://www.hboehm.info/gc/simple_example.html –
@AlexeiAverchenko Aslında bunun, bu "nullptr" veya başka bir örnekle "this" işaretçisini nasıl değiştirebileceğini göremiyorum (ama şimdi sadece kaymış) . Her ne olursa olsun, bu özel durumlar OP için uygunsa tartışılabilir. –
Benim amacım C++ sözdizimi değişkenlerin değerleri hakkında bir şeyleri garanti etmemekte, bu garantiler dilin semantiği ile doğal olarak ilgilenmektedir. –
Vektörün adresi değişmeyecek. Tek tek öğelerin adresi çok fazla değil. – AndyG
Belirli bir nesnenin adresi hiçbir zaman değişmez! –
@NeilKirk Vektördeki belirli nesneler veya bu konuyla ilgili başka bir kap dışında ... – Suedocode