Question: I have a `profile.php` page with a variable `uid?=12` and i have a language bar on that is on a separate page called `lang.inc.php`:

Profile Page: 

```
<div class="langbar">
    <?php include 'inc/lang.inc.php'; ?>
</div>

```

lang.inc.php

```
<center>
    <a class="flag_USA" title="English" href="<?php echo basename($_SERVER['PHP_SELF']); ?>"><img src="css/images/us.png"></a> <span> </span> 
    <a class="flag_France" title="French" href="<?php echo basename($_SERVER['PHP_SELF']); ?>?lang=fr"><img src="css/images/fr.png"></a> <span> </span> 
    <a class="flag_dutch" title="Dutch"  href="<?php echo basename($_SERVER['PHP_SELF']); ?>?lang=de"><img src="css/images/de.png"></a> <span> </span> 
    <a class="flag_Italy" title="Italian" href="<?php echo basename($_SERVER['PHP_SELF']); ?>?lang=it"><img src="css/images/it.png"></a> <span> </span> 
    <a class="flag_Italy" title="" href="<?php echo basename($_SERVER['PHP_SELF']); ?>?lang=es"><img src="css/images/sp.png"></a> <span> </span> 
    <?php echo $_SERVER['PHP_SELF']; ?>
</center>

```

As you can see im trying to append the `?lang=fr` for example to the end of the `profile.php?uid=12` so it looks like this `profile.php?uid=12&lang=fr` but all it's doing is `profile.php?lang=fr`.

Answer: 
The only advantage to moving initialization out of the constructor, and for removing cleanup out of the destructor is when you've got a base class framework where you want to reliably call virtual methods during these stages.

Since the vtable is changing during construction/destruction calls to virtual functions don't resolve to the most derived instance. By having explicit `Initialize`/`Shutdown` methods you can be sure the virtual functions dispatch correctly.

Please note, this isn't an answer that advocates this approach, just one that is trying to work out why they've suggested it!
With such approach you'll need to call Shutdown in all cases where the object should be destroyed - each time when it leaves the scope. In the case of exceptions (if they are used) you'll cannot call it. Destructor will be called automatically in these cases.

"I can certainly call the destructor as well" - calling the destructor explicitly **is highly not recommended** because it will be called automatically in any case. This should be avoided except only in special cases. If you mean this code from the [tutorial](http://www.rastertek.com/dx11tut02.html):

```
System->Shutdown();
delete System;

```

then I don't see the difference because `delete System;` will call the destructor anyway.

In any case I would prefer 

```
{
    // work with System
    ...
}

```

mentioned in @utnapistim answer. I do not see any minuses in such way of coding, and also it is common way to specify scope. Even not going deep in the details of legacy `::ExitThread` you gain auto cleanup. It is possible to work with WinApi with C++ RAII technique, look for instance at my code: [multithreading](https://github.com/alexvdev/multithreading) sample project. Initial commit was bare WinAPI, and next commit introduced resource wrappers. You can compare both variants - second is much clearer, imho.