첫 번째 것은 내 마음에 오는 것은 물체를 움직이는 것입니다.
당신은 new 연산자를 사용하여 클래스의 메모리를 할당했다고합시다.
struct A
{
A()
{
data = new int[50];
}
void destroy()
{
delete [] data;
}
A (const A& copy)
{
data = copy.data;
}
int* data
}
이 개체를 복사하려고합니다.포인터를 데이터에 복사하는 대신 모든 데이터를 복사하는 것이 좋습니다.
A calculateA()
{
A returnVal;
for (int i = 0; i < 50; i++)
returnVal.data[i] = i;
return returnVal;
}
이 경우에는 얕은 복사가 유리할 수 있습니다.
나는 수천 가지 다른 이유가있을 것이라고 확신합니다.
복사본을 복사 할 때 이중 삭제를 방지하려면 복사본을 null로 설정할 수 있습니다.
#include <iostream>
#include <utility>
struct A
{
A()
{
data = new int[50];
}
~A()
{
if (data)
delete [] data;
}
A (A& copy)
{
data = copy.data;
copy.data = nullptr;
}
int* data;
};
int main()
{
A aVal;
for (int i = 0; i < 50; i++)
aVal.data[i] = i;
A anotherVal = aVal;
int i = 10;
while (i--)
std::cout << anotherVal.data[i];
}
예를 들어, T & around, 참조 (또는 가능한 포인터)를 루트 객체에 전달하는 것에 대해 이야기하고 있습니다. – vijay267