Changeset 79480 in vbox
- Timestamp:
- Jul 3, 2019 2:18:47 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 131744
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/mem.h
r78334 r79480 563 563 564 564 565 /** @def RTMEM_IMPLEMENT_NEW_AND_DELETE 566 * Provides a new and delete implementation to a class using IPRT's RTMem 567 * allocator. 568 */ 569 #if !defined(RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF) || defined(RTMEM_NO_WRAP_SOME_NEW_AND_DELETE_TO_EF) 570 # ifdef RT_EXCEPTIONS_ENABLED 571 # define RTMEM_IMPLEMENT_NEW_AND_DELETE() \ 572 void *operator new(size_t cb) RT_THROW(std::bad_alloc) \ 573 { \ 574 void *pv = RTMemAlloc(cb); \ 575 if (RT_LIKELY(pv)) \ 576 return pv; \ 577 throw std::bad_alloc(); \ 578 } \ 579 void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ 580 { \ 581 NOREF(nothrow_constant); \ 582 return RTMemAlloc(cb); \ 583 } \ 584 void *operator new(size_t cb, void *pvBuf) RT_NO_THROW_DEF \ 585 { \ 586 NOREF(cb); \ 587 return pvBuf; \ 588 } \ 589 void *operator new[](size_t cb) RT_THROW(std::bad_alloc) \ 590 { \ 591 void *pv = RTMemAlloc(cb); \ 592 if (RT_LIKELY(pv)) \ 593 return pv; \ 594 throw std::bad_alloc(); \ 595 } \ 596 void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ 597 { \ 598 NOREF(nothrow_constant); \ 599 return RTMemAlloc(cb); \ 600 } \ 601 \ 602 void operator delete(void *pv) RT_NO_THROW_DEF \ 603 { \ 604 RTMemFree(pv); \ 605 } \ 606 void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ 607 { \ 608 NOREF(nothrow_constant); \ 609 RTMemFree(pv); \ 610 } \ 611 void operator delete[](void *pv) RT_NO_THROW_DEF \ 612 { \ 613 RTMemFree(pv); \ 614 } \ 615 void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ 616 { \ 617 NOREF(nothrow_constant); \ 618 RTMemFree(pv); \ 619 } \ 620 \ 621 typedef int UsingIprtNewAndDeleteOperators 622 # else /* !RT_EXCEPTIONS_ENABLED */ 623 # define RTMEM_IMPLEMENT_NEW_AND_DELETE() \ 624 void *operator new(size_t cb) \ 625 { \ 626 return RTMemAlloc(cb); \ 627 } \ 628 void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) \ 629 { \ 630 NOREF(nothrow_constant); \ 631 return RTMemAlloc(cb); \ 632 } \ 633 void *operator new(size_t cb, void *pvBuf) RT_NO_THROW_DEF \ 634 { \ 635 NOREF(cb); \ 636 return pvBuf; \ 637 } \ 638 void *operator new[](size_t cb) \ 639 { \ 640 return RTMemAlloc(cb); \ 641 } \ 642 void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) \ 643 { \ 644 NOREF(nothrow_constant); \ 645 return RTMemAlloc(cb); \ 646 } \ 647 \ 648 void operator delete(void *pv) \ 649 { \ 650 RTMemFree(pv); \ 651 } \ 652 void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) \ 653 { \ 654 NOREF(nothrow_constant); \ 655 RTMemFree(pv); \ 656 } \ 657 void operator delete[](void *pv) \ 658 { \ 659 RTMemFree(pv); \ 660 } \ 661 void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) \ 662 { \ 663 NOREF(nothrow_constant); \ 664 RTMemFree(pv); \ 665 } \ 666 \ 667 typedef int UsingIprtNewAndDeleteOperators 668 # endif /* !RT_EXCEPTIONS_ENABLED */ 669 #else /* defined(RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF) && !defined(RTMEM_NO_WRAP_SOME_NEW_AND_DELETE_TO_EF) */ 670 # define RTMEM_IMPLEMENT_NEW_AND_DELETE() RTMEMEF_NEW_AND_DELETE_OPERATORS() 671 #endif /* defined(RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF) && !defined(RTMEM_NO_WRAP_SOME_NEW_AND_DELETE_TO_EF) */ 672 673 565 674 #ifdef IN_RING0 566 675 … … 848 957 return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ 849 958 } \ 959 void *operator new(size_t cb, void *pvBuf) RT_NO_THROW_DEF \ 960 { \ 961 NOREF(cb); \ 962 return pvBuf; \ 963 } \ 850 964 void *operator new[](size_t cb) RT_THROW(std::bad_alloc) \ 851 965 { \ … … 892 1006 return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ 893 1007 } \ 1008 void *operator new(size_t cb, void *pvBuf) RT_NO_THROW_DEF \ 1009 { \ 1010 NOREF(cb); \ 1011 return pvBuf; \ 1012 } \ 894 1013 void *operator new[](size_t cb) \ 895 1014 { \ … … 924 1043 # endif 925 1044 # define RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT() \ 926 void *operator new(size_t cb) \927 { \928 return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \929 } \930 void *operator new[](size_t cb) \931 { \932 return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \933 } \934 \935 void operator delete(void *pv) \936 { \937 RTMemEfFree(pv, RT_SRC_POS); \938 } \939 void operator delete[](void *pv) \940 { \941 RTMemEfFree(pv, RT_SRC_POS); \942 } \943 \944 typedef int UsingElectricNewAndDeleteOperators1045 void *operator new(size_t cb) \ 1046 { \ 1047 return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ 1048 } \ 1049 void *operator new[](size_t cb) \ 1050 { \ 1051 return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ 1052 } \ 1053 \ 1054 void operator delete(void *pv) \ 1055 { \ 1056 RTMemEfFree(pv, RT_SRC_POS); \ 1057 } \ 1058 void operator delete[](void *pv) \ 1059 { \ 1060 RTMemEfFree(pv, RT_SRC_POS); \ 1061 } \ 1062 \ 1063 typedef int UsingElectricNewAndDeleteOperators 945 1064 #else 946 1065 # define RTMEMEF_NEW_AND_DELETE_OPERATORS() \
Note:
See TracChangeset
for help on using the changeset viewer.