개요
- destroy
- destroy_at
- destroy_n
예제
- 코드
#include <iostream>
#include <memory>
using namespace std;
class Test {
private:
// int i;
public:
int i;
Test(int i) : i(i) {}
~Test() { cout << "~Test() : " << this->i << endl; }
};
void destroy_test() {
cout << __func__ << " start" << endl;
constexpr int size = 3;
unsigned char pool[sizeof(Test) * size];
for (int i = 0; i < size; ++i) {
new (pool + (sizeof(Test) * i)) Test(i);
}
auto ptr = launder(reinterpret_cast<Test *>(pool));
destroy(ptr, ptr + size);
cout << __func__ << " end" << endl;
}
void destroy_at_test() {
cout << __func__ << " start" << endl;
constexpr int size = 3;
unsigned char pool[sizeof(Test) * size];
for (int i = 0; i < size; ++i) {
new (pool + (sizeof(Test) * i)) Test(i);
}
auto ptr = launder(reinterpret_cast<Test *>(pool));
for (int i = 0; i < size; ++i) {
destroy_at(ptr + i);
}
cout << __func__ << " end" << endl;
}
void destroy_n_test() {
cout << __func__ << " start" << endl;
constexpr int size = 3;
unsigned char pool[sizeof(Test) * size];
for (int i = 0; i < size; ++i) {
new (pool + (sizeof(Test) * i)) Test(i);
}
auto ptr = launder(reinterpret_cast<Test *>(pool));
destroy_n(ptr, size);
cout << __func__ << " end" << endl;
}
int main() {
destroy_test();
cout << endl;
destroy_at_test();
cout << endl;
destroy_n_test();
return 0;
}
- 실행 결과
destroy_test start
~Test() : 0
~Test() : 1
~Test() : 2
destroy_test end
destroy_at_test start
~Test() : 0
~Test() : 1
~Test() : 2
destroy_at_test end
destroy_n_test start
~Test() : 0
~Test() : 1
~Test() : 2
destroy_n_test end