Yerel değişkenleri işlevler arasında aktaramazsınız. Böyle bir şey yapmak isterseniz, işaretçiyi döndürmenizi öneririm, böylece bir sonraki işleve iletebilirsiniz.
object *function_test()
{
auto *o = new object{};
return o;
}
ancak bu size diyoruz ve bellek yönetimi yapmak zorunda nerede her yerde bu değişkeni yakalamak zorunda dezavantajına sahiptir. Büyük olasılıkla sadece için bir şey nesne yönelimli benzer kullanmak istiyorsanız:
olarak kullanılabilir
class ObjectOwner final
{
public:
int function_test(){
a = new object();
}
int function_test2(){
delete a;
}
private:
object *a{nullptr};
};
:
ObjectOwner owner;
owner.function_test();
owner.function_test2();
Eğer 2nd çağırmak unuttuğunuzda böylece std::unique_ptr<object>
kullanarak olurdu da iyisi işlev, hafıza serbest bırakıldı.
Son olarak, bir kurucu/yıkıcı kullanmayı düşünebilirsiniz. yazmayı izin
class ObjectOwner final
{
public:
ObjectOwner()
: a(std::make_unique<object>())
{
}
~ObjectOwner() = default;
void func() { /*Do something with a*/ }
private:
std::unique_ptr<object> a{};
};
:
ObjectOwner owner{};
owner.func();
Bir referans olmadan nesneyi silemezsiniz. Referansı geri verdin. Her bir 'function_test()' çağırma işlemini temizlemek için 'function_test2()' nin çağrılması gerektiğini belgelemek için çok dikkatli olursunuz. – SJuan76