It doesn't matter how much space it takes up since you can't actually see any side effect (without executing code) of whatever space it would take up.
On the other hand, one major difference between references and pointers is that temporaries assigned to const references live until the const reference goes out of scope.
For example:
class scope_test
{
public:
~scope_test() { printf("scope_test done!\n"); }
};
...
{
const scope_test &test= scope_test();
printf("in scope\n");
}
will print:
in scope
scope_test done!
This is the language mechanism that allows ScopeGuard to work.