36 lines
583 B
C++
36 lines
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;
|
|
}
|