Gman ve Neil de belirtildiği gibi, hiç fonk değişmek zorunda kalacaktır çalışmak için: En acil sorunu çözecektir
char* func();
veya
void func(char*& p);
.
Bununla birlikte, bir bakım sorunu vardır. Her iki durumda da, func bir işaretçi döndürür. Func kullanıcısı için net olmayan şey, döndürülen işaretçinin silinmesi gerektiğidir. Bu nedenle, genellikle% 100 gerekli olmadıkça bu yapıdan kaçının. Aksine:
- Yardım Kullanıcı daha sonra
- ayrılan bellek depolamak için bir nesne kullanın fonk geçirilen bellek doğru miktarda tahsis. Nesne daha sonra imha edildiğinde karakter dizisini silebilir.
Yani C++ kodu için, ben tavsiye ederim:
class CBuf
{
public
CBuf()
{
iBuf = new char[100];
}
~CBuf
{
delete[] iBuf;
}
char* func()
{
//do stuff;
return iBuf;
}
private:
char* iBuf;
};
int main()
{
CBuf cb;
char* mychar = cb.func();
//do stuff with character array
//destructor gets called here because cb goes out of scope
}
Ancak C programlama özellikle, dizi oluşturmak için bir çeşit fonksiyonu var% 100 gerekli olabilir. Bu nedenle C programlamasında, bir CreateCBuf
ve DestroyCBuf
fonksiyonu ile yıkıcıyı değiştirebilirsiniz. Bu şekilde kütüphanenizin kullanıcısı, iade edilen tamponun imha edilmesi gerektiğini bilir. referanslar sezgisel soyutlama sunan harika olmasına rağmen
"cbuf" unun cp olduğunu varsayalım mı? – GManNickG
gerçek kodu belirleme hakkında. Kod kesilip yapıştırılmadıkça, hata eklemenizin olasılığı vardır. Bu sadece thigs daha zor hale getirir ve biz cbuf gibi kesme ve paster hataları çözme sona erer -> cp –
Bunun için özür dilerim, bir dahaki sefere bunu aklımda tutacağım. Evet cbuf cp –