template <class T>
void delete_object(T* p);
概要
指定された領域にあるオブジェクトを破棄し、そのメモリ領域を解放する(delete
式相当の処理を行う)。
事前条件
p
の指すメモリ領域は以前に*this
の確保関数のいずれかによって確保された領域であること。
かつ、そのメモリ領域は未解放でありp
の指すオブジェクトは破棄されていないこと。
引数
p
-- 対象となるオブジェクトが構築されているメモリへのポインタ
効果
以下と等価。
C++17
this->destroy(p);
this->deallocate_object(p);
C++20
allocator_traits<polymorphic_allocator>::destroy(*this, p)
this->deallocate_object(p);
例
#include <iostream>
#include <memory_resource>
int main() {
//メモリ確保・解放処理を切り替え
std::pmr::monotonic_buffer_resource mr{};
std::pmr::polymorphic_allocator<> alloc{&mr};
//int型の領域を確保しそこにオブジェクトを構築
int* p1 = alloc.new_object<int>(20);
//new式
int* p2 = new int{17};
std::cout << "address : " << p1 << "\n";
std::cout << "address : " << p2 << "\n";
std::cout << *p1 << "\n";
std::cout << *p2 << "\n";
//構築したオブジェクトを破棄し、確保したメモリ領域を解放
alloc.delete_object(p1);
//delete式
delete p2;
}
出力例(GCC9.2)
address : 0x1a2b150
address : 0x1a2b960
20
17
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 9.1 ✅
- Visual C++: 2019 update 9 ✅