[C++] 생성자, 파괴자를 inline으로 만들수있나요?

gurumong의 이미지

책을 보다가 의야스러운점이 있어 질문드립니다.
아래 코드의 파괴자 메서드를 정의한것을 보면 마치 inline으로 정의한것이 아닌가 하는 의문이 드는데요
실제로 아래와 같이 사용했을때 생성자 혹은 파괴자가 컴파일러에 의해 inline으로 정의한것으로 간주되는것인가요?

class Stock
{
private:
  ...
public:
  Stock(); //생성자
  ~Stock() { } //파괴자 (inline ?)
  ...
};
hoppang의 이미지

Quote:

class A
{
public:
inline A(){}
inline ~A(){}
};

int main()
{
A a;
}

g++에서는 에러가 없네요.

근데 그보다 중요한건 inline은 강제가 아닙니다. inline 키워드는 '이것을 인라인으로 만들어라' 가 아니고 '되도록이면 인라인으로 만들어줬으면 좋겠다' 라는겁니다. 이게 표준인지는 잘 모르겠는데 제가 아는 컴파일러는 다 이렇습니다.

그리고 G++의 옵션중에 -finline (inline을 강제)이 있는데 이걸 적용해도 멀쩡한 걸 보면 소멸자가 인라인이 돼도 문제될 건 없는 듯하네요.

hys545의 이미지

즉 inline키워드 써도 컴파일러가 인라인 안하는게 좋다고 생각하면 안하고
inline안써도 인라인 하는게 좋으면 인라인하고

강제로 인라인 하는건 아마 컴파일러 확장 키워드로 가능한거로 압니다.

즐린

즐린

klyx의 이미지

>> inline안써도 인라인 하는게 좋으면 인라인하고

자동으로 인라인해주는 것은, 클래스의 선언부에서 멤버함수를 정의할 때입니다.
함수의 정의가 클래스밖에 있거나, 전역함수 혹은 네임스페이스내의 함수는 inline키워드를 적지 않는 한 인라인 함수로 되지 않습니다.

hys545의 이미지


즐린

즐린

klyx의 이미지

지금 C++ 표준 스펙에 의한 inline에 대해서 이야기 하고 있는것 아니었나요?
컴파일러 최적화 들고 나오면 안될게 뭐가 있겠습니까...
컴파일러가 최적화 할려고 인라이닝하는 건, 딱히 특정 언어와만 관련된 것도 아니구요...

hys545의 이미지


즐린

즐린

philnet의 이미지

Effective C++ 항목 30번을 보면, 인라인과 관련해서 주의해야 할 내용이 잘 정리되어 있습니다.
거기에서 보면 "생성자와 소멸자는 인라인하기에 그리 좋지 않은 함수"라는 얘기가 나오고 그에 대한 설명이 잘 되어 있습니다. 참고하세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.