GeneralPurpose-DeleteIncompleteClass¶
Pointers to incomplete class types shall not be deleted
Required inputs: IR
Bad code (incomplete type at deletion):
// forward.h
class Widget; // Incomplete type - only declaration
// code.cpp
#include "forward.h"
void Process() {
Widget* w = Create(); // Assuming Create() returns Widget*
delete w; // ERROR: incomplete type at delete
} // Undefined behavior!
Good code (complete type at deletion):
// widget.h
class Widget { // Complete type definition
public:
Widget();
~Widget();
};
// code.cpp
#include "widget.h"
void Process() {
Widget* w = new Widget();
delete w; // OK: complete type, destructor called correctly
}
Good code (using smart pointers with complete type):
// forward.h
class Widget; // Incomplete type
// code.cpp
#include "widget.h" // Complete type definition
void Process() {
std::unique_ptr<Widget> w(new Widget()); // OK: destructor generated at template instantiation
// Automatic cleanup on scope exit
}
Possible Messages
Key |
Text |
Severity |
Disabled |
|---|---|---|---|
cafe_message |
{} |
None |
False |
Options¶
This rule shares the following common options: exclude_in_macros, exclude_messages_in_system_headers, excludes, extend_exclude_to_macro_invocations, includes, justification_checker, languages, post_processing, provider, report_at, severity
The following places define options that affect this rule: Stylechecks, Analysis-GlobalOptions
message_predicate¶
message_predicate : typing.Callable[[Cafe_Message], bool] | None = None
True for messages to
report.
reported_severities¶
reported_severities : set[str] = {'error', 'remark', 'warning'}
use_error_number¶
use_error_number : bool = False
use_rule_severity¶
use_rule_severity : bool = False