Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
275 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 ?


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

1 Reply

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...