Note that [man]setcookie[/man] does not put anything into the $COOKIE super-global array. All it does is add it to the set of HTTP headers to be sent to the client. The $COOKIE array gets populated when the client sends its HTTP headers to the server when requesting a page from a domain for which it has an active cookie.
Therefore, yes, a new cookie will not be available until a reload or any new page request. You can, however, add a new element to the $COOKIE array if you'd like at the same time that you do the setcookie(), e.g.:
if(!isset($_COOKIE['name']))
{
$_COOKIE['name'] = 'default value';
setcookie('name', 'default value', 0);
}