mirror of
https://github.com/github/codeql.git
synced 2025-12-18 09:43:15 +01:00
48 lines
888 B
C++
48 lines
888 B
C++
|
|
typedef unsigned long size_t;
|
|
|
|
namespace std
|
|
{
|
|
using ::size_t;
|
|
struct nothrow_t {};
|
|
extern const nothrow_t nothrow;
|
|
}
|
|
|
|
// nothrow new
|
|
void* operator new(std::size_t size, const std::nothrow_t&) throw();
|
|
|
|
// placement new
|
|
void* operator new (std::size_t size, void* ptr) throw();
|
|
|
|
// ---
|
|
|
|
class MyClassForPlacementNew
|
|
{
|
|
public:
|
|
MyClassForPlacementNew(int _v) : v(_v) {}
|
|
~MyClassForPlacementNew() {}
|
|
|
|
private:
|
|
int v;
|
|
};
|
|
|
|
class MyTestForPlacementNew
|
|
{
|
|
public:
|
|
MyTestForPlacementNew()
|
|
{
|
|
void *buffer_ptr = buffer;
|
|
|
|
p1 = new MyClassForPlacementNew(1); // BAD: not released
|
|
p2 = new (std::nothrow) MyClassForPlacementNew(2); // BAD: not released [NOT DETECTED]
|
|
p3 = new (buffer_ptr) MyClassForPlacementNew(3); // GOOD: placement new, not an allocation
|
|
}
|
|
|
|
~MyTestForPlacementNew()
|
|
{
|
|
}
|
|
|
|
MyClassForPlacementNew *p1, *p2, *p3;
|
|
char buffer[sizeof(MyClassForPlacementNew)];
|
|
};
|