2012-05-26 2 views
0

MyClass 클래스가있는 경우 MyClass 생성자 내에서 힙에 MyClass 배열을 선언 할 수 있습니까?Object의 생성자 내에서 Object의 배열을 선언 하시겠습니까?

C#에서는이 작업을 수행 할 수 있지만 C++에서는이 작업을 좋아하지 않습니다.

또한 MyClass 유형에 적절한 생성자에 대한 오류가 발생합니다. 뭔가의 배열을하기 위해

class MyClass 
{ 
    public: 
     MyClass(int); 
    private 
     MyClass* array; 
}; 


MyClass::MyClass(int size){ 
    array = new MyClass[size]; 
} 
+0

메모리가 부족합니다. 그렇습니까? 생성자가 함께 묶이기 때문에 점점 더 많이 먹는다 (힙이나 스택은 중요하지 않음). – tmpearce

답변

4

, 뭔가가기본-작도이어야했다. MyClassint을 생성해야하기 때문에 아닙니다. 포인터가 기본 작도 있습니다

MyClass** array = new MyClass*[size]; 

, 그 수 있도록 : 무엇을 C#

는 비교입니다. 기본적으로 C#에서 SomeObject을 수행 할 때마다 C++에서 SomeObject*과 동일합니다. 코드가 엄청나게 비효율적 일뿐만 아니라 C#의 코드보다 훨씬 나빠서 누출이있을 것입니다.

+0

문제를 해결하는 데 사용할 수있는 코드 줄은 무엇입니까? 나중에 배열을 사용해야하는 특별한 방법이 있습니까? – Jon

+0

@ 존 : 아니, 그걸 고치는 방법이 아니야. 그걸 해결하는 방법이야. MyClass가 _default-constructible_이 아닌 이유가 있습니까? –

+0

나는 트래버스 할 수있는 곳에서 MyClass 객체의 콜렉션을 저장하고 싶습니다. C#에서 Lists를 사용하지 않을 경우 MyClass []의 배열을 만들 것입니다. – Jon

3

배열을 만드는 방법보다 더 근본적인 문제가 있습니다. 어떻게됩니까

class A 
{ 
    A* a; 
public: 
    A(); 
}; 
A::A() 
{ 
    a = new A(); 
} 

:

그것에 대해 이런 식으로 생각 하는가? A을 시도해보십시오. 생성자 내에서 new A이 생성됩니다. 내에서 생성자가 생성되면 new A이 생성됩니다.

붐, 메모리 부족.

관련 문제