가상 소멸자의 필요성?

vani2의 이미지

가상 소멸자는 상속관계에 있는 자식클래스에 소멸자가 있을때 다형성을 고려해 부모클래스의 소멸자를 가상소멸자로 만드는데..

이게 호출될 일이 거의 없을 것 같다고 생각되는데요..

부모클래스의 포인터에 자식클래스를 동적으로 할당해서 사용하는 경우에만 이러한 가상소멸자가 호출되는 경우만 알고 있는데요.

가상 소멸자가 반드시 필요하여 쓰일만한 사례를 알려주세요.

klyx의 이미지

????? https://kldp.org/node/141171 이 질문과 동일인물이 맞으신가요? 스스로 가상 소멸자가 필요한 예제를 올려두고서 쓰일만한 사례를 구하는건 이해가 안되네요.

vani2의 이미지

설명이 부족했군요.

제 말은 "그 경우 이외엔 쓰일 곳이 없는것 같은데 소멸자에 virtual을 사용하는것은 비효율적 아니냐? 의견을 듣고 싶다"

입니다.

klyx의 이미지

절대 상속할 일이 없다면 필요없겠죠. 또는, 상속을 염두에 두더라도 절대 객체를 만들일이 없는 클래스에도 해당될테구요.

vani2의 이미지

상속을 염두해 두었더라도 객체를 만들일이 없는 클래스의 예시를 좀 알려주세요.

단순히 객체를 만들지 않는다 하더라도 포인터를 통해 할당을 하면 위험해질 것 같은데..

xylosper님이 말씀하신 '객체를 만들일이 없다'는 말은 포인터에 동적할당하는 것도 포함해서인가요?

klyx의 이미지

어디에 만든다고 한정 짓지 않았으므로 당연히 스택과 힙을 모두 포함합니다.

객체를 만들지 않는 클래스는 모든 멤버가 static인 클래스입니다.
표준 라이브러리에서 예를 찾아보면, 템플릿 메타프로그래밍을 위한 클래스들이 그러합니다.
std::is_integral(또는 다른 특질 클래스들)은 std::integral_constant를 상속받지만, std::integral_constant는 가상 소멸자를 포함하지 않습니다.

vani2의 이미지

아하. 그렇군요

이해가 되었습니다.

kaeri17의 이미지

그래서 표준 라이브러리 컨테이너들은 가상소멸자가 구현되어 있지 않습니다.

vani2의 이미지

아, 그렇군요

익명 사용자의 이미지

믹서기가 무언가를 갈기위해 만들어졌는데
그것 말고는 쓸일이 없다는 생각이 드네요
믹서기가 반드시 필요하며 쓰일만한 사례를 보여주세요

vani2의 이미지

에.. 질문에 설명이 부족해서 두번째 덧글에 궁금한 것을 덧대긴 했는데..
다시한번 정확히 제가 알고싶은것을 설명드리자면 순수가상 함수 등으로 부터 상속받는 등 이외의 경우에는 쓰일 일이 없다고 생각하는데 혹시 제가 간과하고 있는 부분에서 쓰임이 있을지 몰라 질문을 드린겁니다.

댓글 달기

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