関数間でローカル変数を転送することはできません。このようなことをしたい場合は、ポインタを返すことをお勧めします。ポインタを次の関数に渡すことができます。
object *function_test()
{
auto *o = new object{};
return o;
}
ただし、これは、この変数を呼び出してどこでもメモリ管理を行う必要があるという欠点があります。ほとんどの場合、あなただけの指向何かのオブジェクトを使用したい、と類似:
として使用することができます
class ObjectOwner final
{
public:
int function_test(){
a = new object();
}
int function_test2(){
delete a;
}
private:
object *a{nullptr};
};
:あなたが第二を呼び出すことを忘れたときにようにstd::unique_ptr<object>
を使用することになり
ObjectOwner owner;
owner.function_test();
owner.function_test2();
さらに良いです関数は、メモリが解放されます。
最後に、コンストラクタ/デストラクタの使用を検討できます。あなたが書くことが許可
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();
あなたは参照せずにオブジェクトを削除することはできません。参照を戻します。それぞれの 'function_test()'呼び出しをクリーンアップするためには、 'function_test2()'を呼び出さなければならないことを文書化することに多くの注意を払っています。 – SJuan76