없어질 포인터로 받은 class 포인터 클래스로

wontop의 이미지

bool DataDic::Regist (DataInfo* data_info)
{
	DATAINFO_ITER_T iter;
 
	iter = dic_.find(data_info->key());
	if( iter != dic_.end())
	{
		return false;
	}
 
	DataInfo* tmpDataInfo = new DataInfo;
 
	// 이부분에 보면
	tmpDataInfo = data_info;
	// 
 
	dic_[tmpDataInfo->key()] = tmpDataInfo;
	return true;
}

class인 Data_info의 DATA(data_info)를 tmpDataInfo에 채워넣을려고 합니다.
어떻게 해야 하나요?

위와같이 포인터를 상속해서 주게 된다면 Regist의 파라미터로 받는(즉, 상위함수에서 넘겨준 포인터 정보가 사라진다면)
정보가 변경되었을경우, 아래서 new하므로써 메모리 할당을 받을 이유가 전혀 없지 않나요?

즉, 제가 구현하고자 하는건 데이터를 하나 하나 대입시켜 넘겨주는 방법 말고

포인터로 받은 class를 새로운 포인터 class에 이후에도 변하지 않도록 데이터를 입력하는 방법을 알고 싶습니다.

antaran의 이미지

일단 질문자께서 사용하시는 용어나 표현이 '객관적'이지 못합니다.

다만, 코드와 문장을 몇 번에 걸쳐 읽어본 결과 감을 약간 잡은 듯 하여

질문자께서 의도하시는 바를 '유추'해서 답변을 드려보겠습니다.

DataInfo* tmpDataInfo = new DataInfo;

// 이부분에 보면
tmpDataInfo = data_info;
//

dic_[tmpDataInfo->key()] = tmpDataInfo;

뭐가 되었건 STL container like한 dic_이라는 멤버가 DataInfo*를 저장하는 container라고 가정 할 때

위의 코드는

dic_[data_info->key()] = data_info;

와 전혀 다를 바 없고 data_info가 지워졌을 때 유효하지 않은 주소(객체)를 가르키고 있다는 질문이신 것

같습니다.

그리고 이에 대한 해결책은 간단합니다.

DataInfo* tmpDataInfo = new DataInfo;

// 객체를 할당(복사)하세요. 포인터를 할당하지 마시고.
*tmpDataInfo = *data_info;
//

dic_[tmpDataInfo->key()] = tmpDataInfo;

그리고 한 말씀 드리자면,

최초의 코드는 그 자체로 심각한 오류를 담고 있는 코드입니다(올려주신 코드에서 new DataInfo는
아무 쓸모 없이 버려지고 memory leak이 생기고 있습니다).

죄송하지만 님께 드리고 싶은 말은 자료구조 혹은 기본 C책을 먼저 보십시오. STL을 사용하거나 그 개념을

사용하는데 앞서 있는 것은 어찌됬건 C이고 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.