멤버 벡터를 간단히 할당하는 방법은 무엇입니까?std :: vector <unsigned char *> 멤버 변수를 사용하여 클래스의 복사본 생성자를 작성하는 방법
class WidgetNames
{
WidgetNames(int sz)
{
unsigned char* c = new unsigned char[ sz ];
memset(c,0,sz);
m_names.push_back(c);
m_len.push_back(sz);
}
~WidgetNames()
{
for (size_t i = 0 ; i < m_names.size() ; ++i)
{
if(m_names[i] != NULL)
{
delete [] m_names[i];
}
}
}
WidgetNames(const WidgetNames &other)
{
m_names = other.m_names;
}
std::vector<unsigned char*> m_names;
std::vector<int> m_len;
};
복사 생성자가 범인인지 의심스럽게 만드는 내 소멸자에 크레이치가 나타납니다. 아니면 다른 곳에서 내 문제가 될 수도 있습니다.
EDIT
버퍼 길이가 추가되었습니다. 이것은 완전한 클래스 정의가 아닙니다. 단지 도움을 청하기에 충분한 정보를 제공하고 싶었습니다.
아니요, std :: string을 사용할 수 없습니다. 멤버 벡터를 버퍼에 쓸 수있는 c 함수와 공유하기 때문에
'std :: string'의 벡터를 사용할 수없는 이유는 무엇입니까? –
@Kerrek SB 내가 std :: string을 사용할 수없는 이유는 데이터베이스 저장 프로 시저에 IN/OUT 매개 변수로 전달하기 때문입니다. 즉, 데이터베이스 드라이버가 결과를 문자열로 반환합니다.거기에 std :: string을 만드는 방법이있을 수 있습니다. 만약 내가 있다면 매우 행복 할 것입니다. – gonzales
물론 : 문자열이나 벡터를 가져 와서 크기를'resize()'하고'& x [0]'이나'.data()'를 API. –