cxx-benchmarks/test-constructor-throw.cpp

36 行
583 B
C++

#include <exception>
#include <memory>
#include <type_traits>
#include "make_unique.h"
struct C {
private:
struct private_type { };
C(private_type) { }
int *m_i = nullptr;
public:
C() : C(private_type()) { m_i = new int; throw std::exception(); }
~C() { delete m_i; }
C(C const&) = delete;
C& operator=(C const&) = delete;
};
struct D {
std::unique_ptr<int> m_i;
D() : m_i(std::make_unique<int>()) { m_i = std::make_unique<int>(); throw std::exception(); }
};
int main() {
try {
C c;
} catch (...) { }
auto a = std::make_unique<int[]>(10);
return 0;
}