Chromium Code Reviews| Index: src/core/SkTemplatesPriv.h |
| diff --git a/src/core/SkTemplatesPriv.h b/src/core/SkTemplatesPriv.h |
| index 79ae6093358993917df7cf3261ef4be93a6063e8..c7d61da7cf80e917e5708774b8f43c22763725db 100644 |
| --- a/src/core/SkTemplatesPriv.h |
| +++ b/src/core/SkTemplatesPriv.h |
| @@ -20,6 +20,12 @@ |
| #define SK_PLACEMENT_NEW_ARGS(result, classname, storage, storageSize, args) \ |
| result = SkNEW_ARGS(classname, args) |
| + |
| + #define SK_PLACEMENT_SAFE_NEW(result, classname, storage, storageSize) \ |
| + result = SkNEW(classname) |
|
scroggo
2014/02/11 15:51:29
Yikes! This will result in a memory leak if the ca
Dominik Grewe
2014/02/11 16:04:31
I guess the same is true for the normal placement
scroggo
2014/02/11 16:14:26
Well, this one is actually safer than the normal p
|
| + |
| + #define SK_PLACEMENT_SAFE_NEW_ARGS(result, classname, storage, storageSize, args) \ |
| + result = SkNEW_ARGS(classname, args) |
| #else |
| #include <new> |
| #define SK_PLACEMENT_NEW(result, classname, storage, storagesize) \ |
|
bungeman-skia
2014/02/11 17:06:21
Every current user of this does the same dance whe
|
| @@ -43,6 +49,22 @@ |
| else \ |
| result = SkNEW_ARGS(classname, args); \ |
| } while (0) |
| + |
| + #define SK_PLACEMENT_SAFE_NEW(result, classname, storage, storagesize) \ |
|
bungeman-skia
2014/02/11 17:06:21
Why are we multiplying entities without necessity
|
| + do { \ |
| + if (storagesize >= sizeof(classname)) \ |
| + result = new(storage) classname; \ |
| + else \ |
| + result = SkNEW(classname); \ |
| + } while (0) |
| + |
| + #define SK_PLACEMENT_SAFE_NEW_ARGS(result, classname, storage, storagesize, args) \ |
| + do { \ |
| + if (storagesize >= sizeof(classname)) \ |
| + result = new(storage) classname args; \ |
| + else \ |
| + result = SkNEW_ARGS(classname, args); \ |
| + } while (0) |
| #endif |
| //////////////////////////////////////////////////////////////////////////////// |