합니까 C ++은 순서 지정 사양 operator new
과의 생성자 A
에를 new C(A())
.
g는 순서하자 ++ A()
-> new
-> C()
하지만, 그 소리가하자 ++ new
-> A()
-> C()
.
차이가 지정되지 않은 동작으로 인해 발생합니까?
g ++ : 7.4.0 clang ++ : 10.0.0
#include <iostream>
#include <cstdlib>
struct A {
A() {
std::cout << "call A()\n";
}
};
struct C {
C(A) {
std::cout << "call S()\n";
}
void *operator new(size_t s) {
std::cout << "call new()\n";
return malloc(s);
}
};
int main() {
void *p = new C(A());
}
3
C ++ 17, C ++ 14 또는 이전 버전으로 구축하고 있습니까?
—
StoryTeller-Unslander Monica 2009 년
두 개의 메모 :이 태그에 "C"로 태그를 달았습니다.이 태그는 해당 태그의 설명을 읽지 않았 음을 분명히 보여줍니다. 하지마 이제 "정의되지 않은 행동"(UB)에 대해 질문합니다. 이것은 C ++ 표준에서 어떤 일이 발생할 수 있고 피해야 할 일을 표시하기 위해 사용하는 용어입니다. 코드가 기술적으로 훌륭하고 UB를 유발하지 않기 때문에 "지정되지 않은 동작"이 있습니다.
—
Ulrich Eckhardt
@ Ulrich Eckhardt 제안 해 주셔서 감사합니다. 나는 둘을 섞었다.
—
eddie kuo