Check following code which uses HElib:
class A
{
FHEcontext context;
public:
FHEcontext& getContext()
{
return context;
}
};
void func()
{
auto context = a.getContext();
......
}
A a;
int main(void)
{
......
func();
......
return 0;
}
In func()
:
......
auto context = a.getContext();
......
It will allocate a local variable context
whose type is FHEcontext, not “FHEcontext&
“, and the point is it will be shallow copy of FHEcontext
:
class FHEcontext {
......
//! @breif A default EncryptedArray
const EncryptedArray* ea;
......
}
FHEcontext::~FHEcontext()
{
delete ea;
}
So when the local variable context
is destroyed, the memory of ea
is also released; this will lead to context
member of class A
references a already freed memory. That will be a disaster!
References:
auto
specifier type deduction for references;
The issue about FHEcontext’s copy constructor/assignment operator.