Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
159 views
in Technique[技术] by (71.8m points)

c++ - Passing a pointer by value - allocating memory in the function

When I want to assign a memory to the pointer in the function I have to pass the pointer by reference (or pointer), for example:

void fun(int*& ptr) //or int** ptr
{
    ptr = new int(1); 
}

int* ptr = nullptr;
fun(ptr);
int x = *ptr;

I have noticed that when I have a struct which contains a pointer passing by value works:

struct T
{
    int* ptr{ nullptr };
};

void fun(T* t)
{
    t->ptr = new int(1);
}

T *t = new T{};
fun(t);
int x = *(t->ptr);

Could you explain why in the second case I don't have to pass a pointer to the struct by reference or pointer ?

question from:https://stackoverflow.com/questions/65560265/passing-a-pointer-by-value-allocating-memory-in-the-function

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The type you are trying to return to the caller is int*. Using a typedef should help:

using IntPtr = int*;

void fun(IntPtr& ptr) // works
{
    ptr = new int;
}
void fun(IntPtr* ptr) // works
{
    *ptr = new int;
}
void fun(IntPtr ptr) // won't work
{
    ptr = new int;
}

struct Foo
{
    IntPtr ptr;
};

void fun(Foo& foo) // works
{
    foo.ptr = new int;
}
void fun(Foo* foo) // works
{
    foo->ptr = new int;
}
void fun(Foo foo) // won't work
{
    foo.ptr = new int;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...