unique_ptr
을 특수 소멸자로 다시 정의하고 싶습니다. 따라서 다음 코드를 사용하여 unique_ptr
의 일부 생성자를 모방하려고합니다. 불행히도 constexpr
생성자가 빌드를 거부하고 이유를 모르겠습니다.constexpr 생성자에서 constexpr 생성자를 사용할 수 없습니다.
class job_ptr : public unique_ptr<Job>
{
public:
constexpr job_ptr()
: unique_ptr<Job>(), sequencer(nullptr) {}
constexpr job_ptr(nullptr_t)
: unique_ptr<Job>(nullptr), sequencer(nullptr) {}
private:
FIFOSequencer* sequencer;
};
초기화 목록에서 두 생성자 그러나 clang++
는 고려, constexpr
을 선언 constexpr constructor never produces a constant expression
그 non-literal type 'unique_ptr<Job>' cannot be used in a constant expression
때문이다. 그것은 무엇을 의미하려고합니까? constexpr
생성자 내에서 constexpr
생성자를 사용할 수 없습니까?
도움 주셔서 감사합니다.
당신은 문자 그대로의 형식이 필요합니다 그리고'표준 :: unique_ptr'은 커스텀 Deleter를 제공 할 수있게 해줍니다. (특히 공개적으로 그리고 그 목적을 위해서) – chris
STL을 상속받은 @chris와 완전히 동의합니다. 사소한 상황과'unique_ptr'은 IMHO가 아닙니다. – 101010
리터럴 유형에는 간단한 소멸자가 필요합니다. 일반적으로'unique_ptr'은 리터럴 타입이 될 수 없습니다. – dyp