[질문] c++에서 생성자는 최대한 간단히 하는게 좋은가요?

허재성의 이미지

기초적인 질문 같아 죄송합니다.
c++에서 생성자에 init 관련된 코드들을 넣으려고하는데.. 다른 함수도 호출하고 그럽니다.
처음 한번만 실행하는 것이니 간단하지 않아도 될듯 하고, 왠지 생성자라고 하니 최대한 간단하게
작성하는게 좋을 것도 같고 헤깔려서 질문드려봅니다..

Fe.head의 이미지

왠만하시면 class가 가지고 있는 모든 맴버 변수를 초기화 하시는것이 좋습니다.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

phonon의 이미지

단순히 멤버변수만 초기화를 하는 일은 별로 없을 듯 합니다.
보통은 생성자에서 멤버변수를 초기화하시고 다른 초기화 처리(화일 생성이나 소켓생성등)는 별도의 함수를 만드시는 것이 좋습니다.
생성자가 리턴값을 넘기지 못하므로 initailize(), init(), run_init()등의 함수을 객체 생성이후에 호출하시고 리턴값을 검사해서 초기화에 이상이 없는지 확인해 보세요.
(함수명은 인식하기 쉬는 것으로 정해시고 다른 클래스와 동일성을 가지면 더욱 좋습니다.)

cppig1995의 이미지

생성한 후라는 말씀은 별도로 초기화 함수를 호출해 주어야 한다는 것인데,
차라리 생성자 내에서 상태를 설정한 다음에 그것을 검사케 하는 쪽이 낫지 않을까요?
fstream처럼 말입니다.

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

phonon의 이미지

멤버 변수은 생성자에서 초기화를 하고, 다른 검사나 클래스의 생성 초기화등은 자신의 생성자 안이 아닌 별도의 함수에서 리턴값을 받을 수 있게 하는 것이 규모가 큰 프로젝트에서 유지보수가 쉽습니다.

보통은 개발자들이 코딩 규약에서 생성자/소멸자의 기능 정의와 초기화에 대해 설정하기 나름이지만,
저의 경우는 쓰레드 생성과 공유 메모리를 사용할 때는 이렇게 하는 것이 편하더군요. 이미 코딩 규약이 있어서 그 내용대로 구현을 했습니다만, 프로젝트의 특성에 따라 조금씩 변화를 가하는 것이 좋다고 생각합니다.

hongminhee의 이미지

RAII을 고려해서 설계하시면 될 것 같습니다.

홍민희 (VLAAH, LangDev)

buelgsk8er의 이미지

프로젝트에서 C++ 예외처리를 사용할 생각이면 RAII를 고려하여 생성자에서 최대한 처리를 하고,
C++ 예외처리를 안쓸 생각이면 별도의 초기화 함수로 빼는 식으로 하는 게 좋을 듯

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.