나는 다음과 같은 코드가 있습니다복사 생성자 "구조체 원자"
-
: 나는 몇 가지 질문이
// c++ header file - atomic
template<typename _Tp>
struct atomic
{
private:
_Tp _M_i;
public:
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete; <--- Line c
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(_Tp __i) noexcept : _M_i(__i) { } <--- Line d
operator _Tp() const noexcept
{ return load(); }
operator _Tp() const volatile noexcept
{ return load(); }
_Tp
operator=(_Tp __i) noexcept
{ store(__i); return __i; }
....
:
enum class State : uint32_t
{
FREE,
IDLE,
COAST,
MOVE,
STOP
};
std::atomic<State> car1_state = State::IDLE; <--- Line a
std::atomic<State> car2_state(State::IDLE); <--- Line b
다음은 원자 헤더 파일의 미리보기입니다
누군가는 라인 가 C (및 D 라인되지 않음) 라인 를 호출 끝 어떻게 왜/나를 이해하는 데 도움이 바랍니다 수 있습니다.
감사합니다. "Foo a = Foo (x);"라고 말하면 Foo 생성자 (x는 param), Foo 복사 생성자 (temp 객체를 참조). 또한, Foo (x)가 임시 (prvalue)이기 때문에 궁금 해서요, 왜 생성자를 호출하지 않았습니까? 그렇지 않습니까? –
@AhmedA : 사본을 실제로 만들 필요는 없지만 적합한 생성자는 정식으로 액세스 할 수 있어야합니다. 예, 복사 또는 이동 생성자가 좋습니다. –
Foo (x)가 오류 또는 Foo a =을 발생시키는 이유는 무엇입니까? 후자를 추측하고 있는데 복사 생성자가 호출되는 지점이므로 삭제 된 것으로 표시됩니다. –