첫 번째 생성자가 멤버 std::map
을 편집 한 다음 다른 생성자를 호출합니다. 첫 번째 생성자의 끝에서지도의 크기는 2이고 두 번째 생성자의 시작 부분에서 0입니다.이 원인은 무엇입니까? 여기 C++ 클래스 생성자가지도를 지우습니다
// Test.h
#include <map>
#include <string>
class Test
{
public:
Test(std::string name, int age);
private:
Test();
std::map<std::string, int> myMap_;
}
그리고 여기 내 코드입니다 :
// Test.cpp
#include "test.h"
Test::Test()
{
std::cout << myMap_.size() << std::endl; // Outputs 0
}
Test::Test(std::string name, int age)
{
myMap_.insert(name, age);
myMap_.insert("test", 6);
std::cout << myMap_.size() << std::endl; // Outputs 2
Test();
}
편집 :
#include "test.h"
int main()
{
Test t("yo", 4);
return 0;
}
그것은 다른 개체의 생성자입니다 ... 당신은 두 번 같은 일을 구축하고 싶어? 당신은 할 수 없습니다. 위임하는 생성자가 있지만이 방법은 수행자가 아닙니다. Test1을, Test2를하고 테스트 3 : 나는 두 번 일을 구성하지 않으려는 – LogicStuff
@LogicStuff, 내가 3 생성자가 있습니다. Test1과 Test2는 맵에서 작동하고 둘 다 동일한 코드를 실행해야하기 때문에 Test3에게 마칩니다. init()과 같은 다른 메서드를 사용하여 나에게이 작업을 수행 할 수는 있지만 여전히 생성자의 일부이므로 생성자가 수행 한 것이 더 좋은 아이디어라고 생각했습니다. – Resantic
@Resantic 더 나은 클래스 멤버를 초기화의 ctor - 초기화 기능을 사용하는 것입니다. 실제 코드를 게시하면 다른 사람이이를 구성하는 좋은 방법을 제안 할 수 있습니다. –