据我所知,调用C
或C++
中的函数是按值调用,这意味着调用函数编译器会复制所有参数,然后将它们传递给函数体。 / p>
因此,由于许多参数复制和函数调用,是否可能面临内存泄漏?
答案 0 :(得分:2)
问:由于许多参数复制和函数调用,是否可能面临内存泄漏?
A:直接,不,间接,是的。
假设你有两个struct
。
struct A
{
A(int i) : data(new int(i)) {}
A(const& copy) : data(new int(*copy.data)) {}
// Forgot to add a destructor that deallocates
// memory.
int* data;
};
struct B
{
B(int i) : data(i) {}
int data;
};
当您创建和删除A
的实例时,您正在泄漏内存。 B
不会遇到这个问题。
如果将A
的实例传递给函数,则会创建和删除对象,这将导致内存泄漏。如果你传递B
的实例,那就不会有问题。
我想说的是,将对象传递给函数并制作副本时,这样做本身并不会导致内存泄漏。只有当存在与对象构造和删除相关的内存泄漏时,才会在函数中传递它们时看到内存泄漏。
答案 1 :(得分:0)
对于c,最大堆栈大小是有限的,所以你可以做到这一点使事情变得糟糕。
#define MAX_STACK_SIZE 0x10000000
struct test_s {
char test[MAX_STACK_SIZE];
}
void func(struct test_s instance){
//dothings
}
但是,没有人这样做,instand func就是这个
void func (struct test_s *instance_ref){
//dothings
}