# V744. Temporary object is immediately destroyed after being created. Consider naming the object.

The analyzer detected an error that has to do with the programmer forgetting to name a newly created object. In that case, a temporary anonymous object will be created and destroyed right afterwards. Sometimes programmers may want it that way deliberately, and there's nothing bad about this practice; but it's obviously an error when dealing with such classes as 'CWaitCursor' or 'CMultiLock'.

Consider the following example:

    void func(){
      CMutex mtx;
      CSingleLock(&mtx, TRUE);
      foo();
    }

In this code, a temporary anonymous object of type 'CSingleLock' will be created and destroyed right off, even before the foo() function is called. In this example, the programmer wanted to make sure that the execution of the foo() function would be synched, but actually it will be called without synching, and it may cause serious errors.

To avoid bugs like that, make sure you name objects you're creating.

Example of correct code:

    void func(){
      CMutex mtx;
      CSingleLock lock(&mtx, TRUE);
      foo();
    }

This diagnostic is classified as:

CWE-664 CWE-820 CERT-MSC13-C