2015-08-01 21 views
5

Kendi iç sınıfım varsa, kendi sürümüm vector<char> (kaynağı denetlerim) ve örnek için std::string olarak değiştiremiyorum, std::string olarak bellekten çalmanın bir yolu var. std::string yapar.Std :: string'ten bellek almak mümkün mü (string stringer gibi)?

Yani böyle bir şey:

std::string str{"abcdefghijklmnopqrstu"}; 
MyVectorCharClass mvc(std::move(str)); // Constructor takes memory from str 

Ben std::string veya std::vector için .release() eklemek için bazı gelecekteki tekliflerin duydum düşünüyorum ama şu anda söz ediyorum.

+0

10 eh? ama sonra str geçersiz bir dizge haline geliyor, bunu gerçekten istiyor musun? – Zeks

+0

Vektör sınıfıyla ilgili tekerleği yeniden icat etmenin belirli bir nedeni var mı? std :: vector' tüm C++ standart kütüphanelerinde standartlaştırılmıştır, vektör sınıfınız değildir. –

+1

Belki bazı performans değerlendirmeleri? Özel kullanım durumları? Büyük olasılıkla bir "öğrenme amaçlı" ya da bir şey. Ancak, tüm vakaların% 95'inde olmasına rağmen, tüm bu "dizeleri" ve "dynamic_array'ler" yazarken, saçma, bazen gereklidir. Özellikle, örneğin, bir çok kopyanız varsa ve profiler size söylerse, bu 'string :: string (const string &)' çok fazla çağrılırsa, uint64_t sayım sonucunu tutmak için çok küçüktü ... –

cevap

6

Hayır. std::string'un yönetdiği arabellek buna özeldir. &str[0] aracılığıyla erişebilirsiniz, ancak string hala geçerli olacak ve kapsamı dışına çıktığında yok edecektir. str'un artık başka bir arabelleğe sahip olduğunu veya temel arabelleğini nullptr'a veya delete arabelleğe almayı başka bir şekilde ayarladığını bildirmenin hiçbir yolu yoktur. Bu, std::string numaralı telefonun işidir.

. Tamponuna sahip ve bunu bırakmayacak.

İlgili konular