위치지정 new에 대응되는 delete를 main에서 직접 호출하는 방법은 뭔가요?

dltkddyd의 이미지

svoid* operator new(std::size_t, double m);
void operator delete(void* pt, double m);

위치지정 new와 그에 대응되는 delete를 클래스 내부에 선언하고 정의했습니다. 그리고 new는

new(95.67) Base;

라 호출했습니다. 이건 제대로 호출이 됩니다. 그런데 그에 대응되는 delete

void operator delete(void* pt, double m);

어떻게 호출해야 하나요. 이 함수는 런타임 시스템만 호출할 수 있는 것인가요?

아래는 이를 테스트하기 위해 사용한 소스입니다.

-test6.h-

#include <cstddef>
 
template<class T, unsigned int _length>
class Base {
public:
	T* pt;
	Base();
	void* operator new(std::size_t size);
	void* operator new[](std::size_t size);
	void operator delete(void* pt,std::size_t size);
	void operator delete[](void* pt, std::size_t size);
 
	void* operator new(std::size_t, double m);//이 new 연산자에 대하여
	void operator delete(void* pt, double m);//이 대응되는 delete 연산자가 호출되도록 했는데 안 되는군요.
 
 
 
};
 
template<class T, unsigned int _length>
class Derived:public Base<T,_length> {
public:
	using Base<T,_length>::pt;
	T& operator[](unsigned int _index);
};
template<class T, unsigned int _length>
T& Derived<T,_length>::operator[](unsigned int _index) {
	//return Base<T,_length>::pt[_index];
	return pt[_index];
}
 
 
 
template<class T, unsigned int _length>
Base<T,_length>::Base() {
	pt=new T[_length];
}
 
template<class T, unsigned int _length>
void* Base<T,_length>::operator new(size_t size) {
cout<<"new"<<endl;
	return ::operator new(size);
}
 
template<class T, unsigned int _length>
void* Base<T,  _length>::operator new[](std::size_t size) {
	cout<<"void* operator new[](std::size_t size)"<<endl;
	return ::operator new[](size);
}
 
template<class T, unsigned int _length>
void Base<T,_length>::operator delete(void* pt,size_t size) {
cout<<"delete"<<endl;
	::operator delete(pt);
}
template<class T, unsigned int _length>
void Base<T, _length>::operator delete[](void* pt, size_t size) {
	cout<<"void operator delete[](void* pt)"<<endl;
	::operator delete[](pt);
}
 
template<class T, unsigned int _length>
void* Base<T,_length>::operator new(std::size_t size, double m) {
	cout<<"void operator new(std::size_t, int m)    "<<m<<endl;
	::operator new(size);
}
 
template<class T, unsigned int _length>
void Base<T,_length>::operator delete(void* pt, double m) {
	cout<<"void operator delete(void* pt, int m)    "<<m<<endl;
	::operator delete(pt);
}

-test6.cc-

#include <iostream>
using namespace std;
#include "test6.h"
 
int main() {
	/*Base<int,5> *ptr=new Base<int,5>[3];
	unsigned int k=0;
	for(Base<int,5>* i=ptr;i!=ptr+3;i++) {
		for(int* j=(*i).pt;j!=(*i).pt+5;j++) {
			*j=k++;
		}
	}
	for(Base<int,5>* i=ptr;i!=ptr+3;i++) {
		for(int* j=(*i).pt;j!=(*i).pt+5;j++) {
			cout<<*j<<endl;
		}
	}
	delete[] ptr;*/
 
 
 
	Base<int,10>* ptr2=new (90.56) Base<int,10>;//이 행은 정상인데
	//delete(90.56) ptr2;//이 행에서 static void operator delete(void* pt, double m)이 호출되지 않습니다.
	return 0;
}

익명 사용자의 이미지

c++ placement new

검색해봐

dltkddyd의 이미지

아래 뭐라고 썼냐? 해결했다고 했지. 난독증입니까? 참 답변 달지 않아도 괜찮다고 했잤니. 무시 받으면서도 계속 답변은 달고. 그게 당신의 문제입니다. 인정에 굶주린 가엾은 X같군요. 그리고 저건 답변이랄 수도 없는거고. 그러니 무시 받는 겁니다. 아셨죠? 알면 왜 호출되지 않는지 설명해보시던가. 난 아래 언급했듯이 답을 이미 알고 있어요.
그리고 먼저 썼던 글에 답변에서 제가 반말을 썼다고 했죠? 그런데 제가 한 그 말들 표준어입니다. 국어사전 찾아보세요.
그리고 님의 링크는 그쪽이나 실컷 찾아보세요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

음.. 위는 제가 아니고요. 진정하시고요.

어차피 서로 다만 피장 파장이라 생각했을 뿐 전 누가 먼저 시작했냐 따질 생각 없었고요. 그냥 님이 제가 먼저 시작해놓고 오리발 내밀었다 하시니까 저도 억울해서 찾아드린거죠. 하여간 그만 할테니 진정하세요.

익명 사용자의 이미지

원하시면 다 찾아드리죠.

dltkddyd의 이미지

책을 보면 바로 바로 의문이 생기는 부분을 먼저 시험하다 보니 간혹 뒷 부분의 설명을 보지 못하는 경우가 생기는군요. 책 뒤에 이에 대한 해답이 있었는데요.

Effective C++ p374
위치지정 delete가 호출되는 경우는 위치지정 new의 호출에 '묻어서' 함께 호출되는 생성자에서 예외가 발생할 때뿐입니다.

이렇게 설명하고 있군요. 지우려고 했는데 또 못 지우는군요. 그리고 이 책 읽으라고 권하신 분에게 감사하다는 말씀 드려야겠습니다. 처음에는 코드가 별로 없길래 '이게 뭐야! 코드도 없고. 설명이 너무 빈약한 것 아니야.'라고 생각했는데. 읽을 수록 모르고 간과할 수 있는 치명적인 실수에 대해 언급을 많이 해놓으셨더군요. 모르면 독이 되는 것들에 대해서요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

kaeri17의 이미지

읽으라고는 제가 한것 같은데요... 한장 읽을때마다 기초적인 질문을 양산하는걸 보니 제가 잘못한 느낌입니다. EC++은 C++에 대한 스킬에 대한 책이고요, 님은 일단 메모리라던가 운영체제라던가 하는 기본적인 개념을 좀더 공부를 하셨으면 합니다.

익명 사용자의 이미지

동감. 주화입마에 빠진듯.

dltkddyd의 이미지

XXX같이 놀지 말고.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

XXX라 했으니 비속어가 아닙니다.
닥쳐라는 국어사전에 있는 말입니다.
tunecolor는 오프라인에서도 떳떳하게 밝힐 수 있는 아이디입니다.

dltkddyd의 이미지

angel님이죠. ㅋ. 그런데 언제까지 꼬리물기 해야하나요. 날도 더운데, 저 분은 안 지치나.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

kaeri17의 이미지

그리고 추가하자면 운영체제가 메모리 할당하는 방식을 모르는 사람이 짠 placement new를 저라면 절대 쓰고싶지 않네요...

dltkddyd의 이미지

업그레이드 해서 쓰면 써도 배포는 안 합니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

여하튼 이 책 도움이 많이 됐습니다. 님의 느낌이 중요한 건 아니죠. 그 책을 받아들이는 사람이 어떻게 받아들이느냐가 중요한 것이지. 그리고 메모리, 운영체제 공부를 해야할 필요는 느낍니다만 먼저 해야할 일이 있기에 .. 여하튼 권해주신 책 감사하고, 충고도 감사하게 받죠.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

dltkddyd의 이미지

ㅋ. 저건 캐리님이 저 책 읽으라고 권하시기 전이군요. 좋은 책은 좋은 벗보다 더 반갑다. 솔직히 책 읽고 저도 많이 웃었습니다. 여하튼 잘못 된 방식이 무엇인지 알게 되어 다행이라고 해야겠군요. 링크 거신 글 올리신 분인가 보군요. 요 아래 욕설도?

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

dltkddyd의 이미지

그 때가 문법책 가상함수편 읽기 전이었을 겁니다. STL의 container는 비가상함수만 있기 때문에 상속해서 오버라이딩할 수 없는 경우라고 책에 나와있네요. 포인터에서 실질적으로 가리키는 대상의 함수로 호출될 수 없는 문제가 발생한다는 것이었고요. container는 가능한 상속받지 않는 것이 낫고, 상속받더라고 오버라이딩을 하지 말아야 겠습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

자존감이 높은 사람: (평소 이런 상황을 아예 만들지 않는다)
자존감이 뭔지 아는 사람: (얼굴이 화끈거리며) 제가 저랬었군요. 그땐 미안했습니다. '앞으론 그러지 말아야지'
천상천하 유아독존: '이 XXX가 날 쫓아내려 드는구나.' (울그락 불그락 애써 웃으며) 그건 ~~~ 라서 그렇지. (상황을 모면하려 앞뒤가 안 맞는 거짓말을 늘어놓는다)

dltkddyd의 이미지

답변 달아달라고 강요한 적도 없을 뿐더러 익명이 단 답글은 왠지 불쾌하기까지 하더군요. 남의 마음 상태롤 지례짐작으로 함부로 말하고. 님은 제 셋 중에 어떤 부류라 생각하시는지? 그쪽도 역시 만만찮아요. 본인이 조금 아는 것으로 남을 무시하려는 자세는 저 셋 중에 어떤 경우에 해당하는지 생각해보셔야 겠습니다. 여기서 이런 험담이 무슨 소용이 있다고 그러는지. 책 권해주신 분께 감사하다고 말했어도 그 감사도 못 받는 수준이라면 욕 먹으라고 해야할까요? 좋은 말을 해줘도 딴지 거는 버릇이 있는 사람은 계속 그 습성이 남아서 그런 짓을 해댑니다. 요 앞 글 보세요. 글을 보고도 헤아리지 못하는 사람이 누굴 가르치려 듭니까? 그냥 편히 쉬세요. 그쪽은 천상천하 유아독존 자존감이 높은 사람이신가보군요? 이리 남의 말에 의존적인 것을 보면. 열 잘 받는 다혈질이군요. 그리고 당신 같은 사람은 편협해서 설사 상대방이 실수하고 사과했다 해도 더 무시하면 했지 너그럽게 수용할 수 있는 그런 유형의 사람은 아닌 것으로 보입니다. 개구리 올챙이적 생각 못하겠지.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

:(

익명 사용자의 이미지

둘 다.. 진짜 가관이다..
아무데나 대들더니 필요할 때만 만만한 놈 없나 지 편 찾는 거 봐라.. 누굴 바보로 아나
저런 것들 많이 봤다.. 한 번 울면 다들 벙쪄서 그냥 넘어가고 ㅋㅋ 정치적으로 잔머리나 굴리기나하지
다들 그러는 건 이유가 있는 거지 혼자 지롤하던 저 찐따놈도 꼴깝하더니 ㅋ 벽이 어째? 속셈 빤하다 그래놓고 KLDP가 어쩌고 ㅋㅋㅋ 어련히 알아서들 할 건데
세상에 자기들만 다 옳고 피해자지ㅋ 입만 살아선 며칠 동안 쇼를 하더니
다른 사람은 생각도 안하나
여긴 머하러 오는 건지..
아주 재밌어.. 상종을 말아야지..

익명 사용자의 이미지

고만 하시지요.

dltkddyd의 이미지

그리고 당신 약 먹은 사람 같네요. 비속어나 남발하는 사람에게 무슨 답변을 기대하겠습니까? 오고 말고는 내 마음이에요. 너나 오지 마세요. 아셨죠? 벙찌다는 뭐고. 울긴 누가 울고. 여기서 누가 정치를 하나. 저런 사람을 본보기로 삼아 경계하는 마음을 갖고 살아야겠습니다. 말복도 아닌데 벌써부터 그러면 말복을 어찌 지내려고.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

맞기도 전에 겁먹는 놈은

.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................

찐따한테도 맞는 놈.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

댓글 달기

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