Synopsis: | Use smart pointers for memory management |
Language: | C++ |
Severity Level: | 2 |
Category: | Object Allocation |
Description: |
Smart pointers are pointers that free their allocated memory automatically when they go out of scope. In this way, memory leaks are avoided automatically. Use make_shared and make_unique to create smart pointers. Example (wrong): void m() { MyObject* ptr = new MyObject(); ptr->DoSomething(); // Use the object in some way delete ptr; // Destroy the object. Done with it. } Example (wrong): void m() { std::unique_ptr<MyObject> ptr(new MyObject()); ptr->DoSomething(); } Example (correct): void m() { auto ptr = std::make_unique<MyObject>(); ptr->DoSomething(); } An exception to this rule might seem the use of "reset": sptr.reset(new Foo); However, it is better to use: sptr = std::make_shared instead in such a case because it will free the memory of the previous contents and move the new pointer into the smart pointer. In this way, the keywords "new" and "delete" can be banned completely. |