내 코드는 내가 메모리가 주요 기능 할당과 재미를 참조 재미에 메모리를 삭제하여로 전달 삭제할 수참조로 전달 된 객체를 삭제할 수 있습니까?
fun(int &a)
{
delete &a;
}
main()
{
int *a = new int(10);
fun(*a);
}
다음과 같이인가? 올바른 방법일까요?
내 코드는 내가 메모리가 주요 기능 할당과 재미를 참조 재미에 메모리를 삭제하여로 전달 삭제할 수참조로 전달 된 객체를 삭제할 수 있습니까?
fun(int &a)
{
delete &a;
}
main()
{
int *a = new int(10);
fun(*a);
}
다음과 같이인가? 올바른 방법일까요?
짧은 대답 : 예, 가능합니다. 하지 마십시오.
참조가 변경되지 않습니다. 즉, 주소 (컴파일러가 포인터로 참조를 구현 한 경우)는 변경 될 수 없습니다. 따라서 삭제하면 원래 참조가 할당되지 않은 메모리를 가리키고 충돌합니다.
또한 코드에서 배열의 첫 번째 (고유 한) 요소에 대한 참조를 전달하지만 (포인터를 배열로 생각하는 경우) 재미 있지만 배열의 크기는 알 수 없습니다. 배열입니다. 예 :
fun(int &a)
{
delete &a;
}
main()
{
int a = 42;
fun(a);
}
참조 주소를 삭제하려고 시도합니다. 예기치 않은 동작입니다.
"또한 코드에서 배열의 첫 번째 요소에 대한 참조가 전달됩니다."- 아니요, OP는 그렇게하지 않습니다. 그건 제쳐두고,이 대답은 한 문장 설명 할 수없는 대답, 두 단락 논평입니다. 논평은 나쁘지는 않지만 (올바른 것으로 편집 된 경우), 답을 설명하고 싶을 수도 있습니다. – hvd
이 작업을 수행하지 마십시오
을 나는 이것이 미키 마우스 예이다 생각하지만, 현실 세계에서 : [시작
int
는 new
에 의해 만들어지지 않을 수 있습니다 - 다음은 많은 문제들개체 소유자를 결정하십시오. 또한 "사람"이 new
을 통해 생성하는 경우 delete
책임을 져야합니다.
체크 아웃 스마트 포인터는
이 더'C'입니다 .... –
예 올바른 ... 당신이 그것을 시도하지 않았다? –
나는 그것을 시험해 보았다. 하지만 이런 개체를 삭제하는 것을 본 적이 없으므로 dobt가 발생했습니다. –