C에 이름 ++없이 객체를 만듭니다는 다음을 수행 할 수 있습니다 자바에서
Parameter p;
function(p);
을하지만 할 수 있습니다 : C에서
function(new Parameter());
++ 나는 내가 할 수있는 것을 알고있다 예 :
function(Parameter p);
(C++)?
C에 이름 ++없이 객체를 만듭니다는 다음을 수행 할 수 있습니다 자바에서
Parameter p;
function(p);
을하지만 할 수 있습니다 : C에서
function(new Parameter());
++ 나는 내가 할 수있는 것을 알고있다 예 :
function(Parameter p);
(C++)?
예. Java와 비교하여 스택이나 힙에 만들지 여부를 결정해야합니다. 전자는 int와 같은 동작을하지만 (int와 같은 동작, 다형성없는 동작), 후자는 참조 의미 (동일한 객체 인스턴스를 참조하고, 다형성으로 동작 할 수 있고, 복제로 복사)를 가질 수있는 값 의미론을 가질 수 있습니다.
void ref(const X& x) { x.do(); } // Reference semantics
void ptr(const X* const x) { x->do();} // Reference semantics
void val(const X x) { x.do(); } // Value semantics
int main()
{
ref(X{}); // Created on the stack
ptr(new X{}); // Created on the heap, but leaks!
val(X{}); // Created on the stack, moved rather than copied if available
auto x = X{}; // Created on the stack
ref(x);
ptr(&x);
val(x); // Makes a copy of the object
auto p = std::make_unique<X>(); // Created on the heap, doesn't leak
ref(*p);
ptr(p.get());
val(*p); // Makes a copy of the object
}
* 일부 농구대를 뛰어 넘으면 값 의미와 함께 다형성 동작을 가질 수 있습니다. 예를 들어 루이 디온 (Louis Dionne)의 CppCon17에서의 이야기 (Runtime Polymorphism)를 참조하십시오. 이 농구를 뛰어 넘지 않고 값 객체를 다형 적으로 사용하려고하면 객체 조각으로 끝날 수 있습니다.
네, 그런 일을 할 수 있습니다. 이것은 임시 변수이므로 Java에서와 마찬가지로 이름을 지정할 필요가 없습니다.
구문은 다음과 같습니다 클래스를 매개 변수가 필요한 경우
이function(Parameter());
단지 임시 변수 생성자에 전달 :
function(std::string("hello"));
그리고 마지막으로, 당신은 자바 쓴 C에서 작동합니다 ++ 뿐만 아니라 :
function(new Parameter());
그러나 이것은 힙에 Parameter 객체를 할당하고 void 메모리 누수가 있으면 함수 내에서 삭제해야합니다. 그러나 이것은 대개 나쁜 생각입니다.