1
에 대한 액세스 검색 A
클래스의 개체에 대한 참조를 허용하는 생성자가 클래스 B
에 있고 해당 클래스의 임시로 호출되는 경우 생성자가 완료되면 참조가 유효하지 않은 것으로 보입니다 (example run 참조).해제 된 이름없는 임시
g++ -Wall -Wextra -pedantic
clang++ -Wall -Wextra -pedantic
cppcheck
clang-tidy
- CLion의 통합 검사
내가 이해 생각 : 그러나, 정적 코드 분석 도구 중 어떤 것도 나는이 상태를 감지하지 시도 컴파일러의 동작이 준수하는지 여부 표준에 맞 춥니 다. 기존 코드베이스에서 그러한 코드를 탐지하는 방법은 무엇입니까? 어떤 프로그래밍 규칙이 잡기 어려운 오류를 피할 수 있습니까?
완전한 예제 코드와 주석이 달린 출력.
#include <iostream>
class A {
public:
explicit A(int i) : i_(i) { std::cerr << this << " A\n"; }
~A() { std::cerr << this << " ~A\n"; }
void do_() const { std::cerr << this << " " << i_ << "\n"; }
private:
int i_;
};
class B {
public:
explicit B(const A& a) : a_(a) { std::cerr << this << " B\n"; }
~B() { std::cerr << this << " ~B\n"; }
void do_() const { std::cerr << this << " "; a_.do_(); }
const A& a_;
};
int main(int, char**) {
B b(A(42));
int i = 0;
b.do_();
std::cerr << i << " main\n";
}
출력 :
는# Construction of b
0xffa66138 A
0xffa66134 B
0xffa66138 ~A
# Calling b.do_()
0xffa66134 0xffa66138 42
# Printing i in main()
0 main
# End of main()
0xffa66134 ~B
회원 변수로 참조를 포함하는 클래스를 검색하면됩니다. 거의 항상 원하는 것은 아닙니다. 정규식은 대부분의 경우를 찾을 수 있어야합니다. –
나는 단지 수업에서 레퍼런스 멤버들을 금지 할 것이다. – NathanOliver
임시 보관을 금지하거나 금지하더라도 'B'의 객체가 'A'(참조 매달린 참조 된 객체)보다 오래 걸리면 여전히 문제가 발생하지 않습니까? – UnholySheep