C ++에서 생성자와 소멸자가 인라인 함수가 될 수 있습니까?
VC ++는 클래스 선언 인라인 함수 내에서 구현되는 함수를 만듭니다.
Foo다음과 같이 클래스 를 선언 하면 CONSTRUCTOR 및 DESTRUCTOR 인라인 함수입니까?
class Foo
{
int* p;
public:
Foo() { p = new char[0x00100000]; }
~Foo() { delete [] p; }
};
{
Foo f;
(f);
}
생성자의 본문을 클래스 내부에 정의하는 것은 "inline"키워드를 사용하여 클래스 외부에 함수를 배치하는 것과 동일한 효과를 갖습니다.
두 경우 모두 컴파일러에 대한 힌트입니다. "인라인"함수가 반드시 함수가 인라인된다는 것을 의미하지는 않습니다. 이는 기능 및 기타 규칙의 복잡성에 따라 다릅니다.
짧은 대답은 '예'입니다. 모든 함수는 인라인으로 선언 할 수 있으며, 클래스 정의에 함수 본문을 넣는 것이이를 수행하는 한 가지 방법입니다. 다음을 수행 할 수도 있습니다.
class Foo
{
int* p;
public:
Foo();
~Foo();
};
inline Foo::Foo()
{
p = new char[0x00100000];
}
inline Foo::~Foo()
{
delete [] p;
}
그러나 실제로 함수를 인라인하는 경우 컴파일러에 달려 있습니다. VC ++는 인라인 요청을 거의 무시합니다. 좋은 생각이라고 생각하는 경우에만 함수를 인라인합니다. 최신 버전의 컴파일러는 링크 타임 코드 생성 을 사용하는 경우 별도의 .obj 파일에 있고 인라인으로 선언되지 않은 항목 (예 : 다른 .cpp 파일의 코드에서)도 인라인 합니다.
__forceinline 키워드를 사용하여 "이 함수를 인라인"이라고 말했을 때 실제로 의미한다고 컴파일러에 알릴 수 있지만, 그럴 가치가 없습니다. 대부분의 경우 컴파일러는 실제로 가장 잘 알고 있습니다.
inline 키워드로 함수를 표시하는 것과 동일한 클래스 본문에 함수 정의를 넣습니다. 즉, 함수가 컴파일러에 의해 인라인 될 수도 있고 아닐 수도 있습니다. 그래서 가장 좋은 대답은 "어쩌면"일까요?
다른 함수를 인라인으로 만들 수있는 것과 같은 정도로 그렇습니다.
인라인 여부는 대부분 컴파일러에 의해 결정됩니다. 코드의 인라인은 컴파일러에 대한 힌트 만 제공합니다.
신뢰할 수있는 한 가지 규칙은 가상 기능이 인라인되지 않는다는 것입니다. 기본 클래스에 가상 생성자 / 소멸자가 있으면 아마 인라인되지 않을 것입니다.
참고 URL : https://stackoverflow.com/questions/21303/in-c-can-constructor-and-destructor-be-inline-functions
'Program Club' 카테고리의 다른 글
| 이전 활동을 완료하고 새 활동을 시작하거나 그 반대의 경우도 마찬가지입니다. (0) | 2020.11.11 |
|---|---|
| 조각을 사용하는 이유는 무엇입니까? (0) | 2020.11.11 |
| '더 똑똑한'방식으로 파이썬을 사용하여 파일을 다운로드하는 방법은 무엇입니까? (0) | 2020.11.11 |
| 요소의 계산 된 스타일을 반환하여 해당 요소를 의사 복제하는 jQuery CSS 플러그인? (0) | 2020.11.11 |
| 전화 통화를위한 URL 체계 (0) | 2020.11.11 |