[C++] 생성자, 파괴자를 inline으로 만들수있나요?
글쓴이: gurumong / 작성시간: 토, 2010/05/22 - 5:51오후
책을 보다가 의야스러운점이 있어 질문드립니다.
아래 코드의 파괴자 메서드를 정의한것을 보면 마치 inline으로 정의한것이 아닌가 하는 의문이 드는데요
실제로 아래와 같이 사용했을때 생성자 혹은 파괴자가 컴파일러에 의해 inline으로 정의한것으로 간주되는것인가요?
class Stock { private: ... public: Stock(); //생성자 ~Stock() { } //파괴자 (inline ?) ... };
Forums:
인용: class A { public:
g++에서는 에러가 없네요.
근데 그보다 중요한건 inline은 강제가 아닙니다. inline 키워드는 '이것을 인라인으로 만들어라' 가 아니고 '되도록이면 인라인으로 만들어줬으면 좋겠다' 라는겁니다. 이게 표준인지는 잘 모르겠는데 제가 아는 컴파일러는 다 이렇습니다.
그리고 G++의 옵션중에 -finline (inline을 강제)이 있는데 이걸 적용해도 멀쩡한 걸 보면 소멸자가 인라인이 돼도 문제될 건 없는 듯하네요.
표준이 inline 키워드가 강제가 아닌거로 압니다.
즉 inline키워드 써도 컴파일러가 인라인 안하는게 좋다고 생각하면 안하고
inline안써도 인라인 하는게 좋으면 인라인하고
강제로 인라인 하는건 아마 컴파일러 확장 키워드로 가능한거로 압니다.
즐린
즐린
>> inline안써도 인라인
>> inline안써도 인라인 하는게 좋으면 인라인하고
자동으로 인라인해주는 것은, 클래스의 선언부에서 멤버함수를 정의할 때입니다.
함수의 정의가 클래스밖에 있거나, 전역함수 혹은 네임스페이스내의 함수는 inline키워드를 적지 않는 한 인라인 함수로 되지 않습니다.
컴파일러가 최적화할때 인라인 함수로 만들기도 합니다.
즐린
즐린
지금 C++ 표준 스펙에
지금 C++ 표준 스펙에 의한 inline에 대해서 이야기 하고 있는것 아니었나요?
컴파일러 최적화 들고 나오면 안될게 뭐가 있겠습니까...
컴파일러가 최적화 할려고 인라이닝하는 건, 딱히 특정 언어와만 관련된 것도 아니구요...
예 알았습니다
즐린
즐린
Effective C++ 항목
Effective C++ 항목 30번을 보면, 인라인과 관련해서 주의해야 할 내용이 잘 정리되어 있습니다.
거기에서 보면 "생성자와 소멸자는 인라인하기에 그리 좋지 않은 함수"라는 얘기가 나오고 그에 대한 설명이 잘 되어 있습니다. 참고하세요.
댓글 달기