2014-09-06 3 views
0

필드로 바라는 다른 클래스가있는 Foo라는 클래스가 있습니다. 막대에는 인수가있는 생성자 만 있습니다. Bar에 대한 인수가있는 생성자를 어떻게 선택합니까 (Bar 대신 Bar *를 저장하지 않고 new를 호출하지 않고)?클래스 개체 필드의 생성자 선택

Foo.h

class Foo 
{ 
    private: 
     Bar bar; 
}; 

Bar.h

class Bar 
{ 
    public: 
     Bar(int arbitraryArg); 
}; 

foo.cpp에

Foo::Foo() 
    : bar(bar(1)) 
{} 

나는 그것이 일반적으로 좋지 않다 듣고 있기 때문에 위의 작업을 수행 할 메모리 관리를 피하기 위해 절대적으로 필요한 경우가 아니라면 포인터를 필드로 저장하십시오. 따라서 다음과 같은 것을 피하십시오.

Foo.h

class Foo 
{ 
    private: 
     Bar* bar; 

    public: 
     Foo(); 
} 

foo.cpp에

Foo::Foo() 
    : bar(NULL) 
{ 
    bar = new Bar(1); 
} 

답변

2

그래서 부근에 있습니다.

Foo::Foo() 
    : bar(1) 
{} 

또한 클래스 Foo의 정의에 생성자 Foo()를 선언해야합니다 (당신의 클래스 정의의 모든 말에 ; 필요).

+0

처음이었고, 그 일 이후 나는이 대답을 받아들이는거야. 이것은 또한 그것을하는 아주 멋진 속기 방법입니다. – brandonto

1

외관이 거의 ​​비슷하지만 인수 나 변수 이름이 아닌 생성자를 호출해야합니다.

변경하려면 다음

:bar(Bar(1)) {

주 자본 B.

+0

이 답변도 효과가 있으며, 원래 내가해야한다고 생각했습니다. 다른 대답은 더 짧지 만, 이것은 초보자들에게 더 분명 할 수 있습니다 (나와 같은) – brandonto