Я знаю, что мог бы использовать std :: vector в C ++ вместо массивов и избавить меня от некоторых проблем.Однако этот вопрос не для практического применения.Это скорее для моего понимания.Я вижу «0» вместо фактического значения в операции memcpy ().Что я делаю не так в этом тестовом коде?
#include <stdint.h>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
class IntList
{
private:
int* m_anList; //I could use std::vector in practical applications I know
//However I want to experiment what happens
public:
IntList(const int m_anList[]){
this->m_anList = new int[sizeof(m_anList+1)]; //heap allocation - since bad idea to copy on stack
memcpy((int*)this->m_anList,m_anList,sizeof(m_anList+1)); //<-This does not look right
cout << this->m_anList[4] << endl;//<- gives '0'??? Not expected
}
~IntList(){
if(this->m_anList)
{
delete[] this->m_anList;
}
}
int& operator[] (const int& nIndex);
};
int& IntList::operator[] (const int& nIndex)
{
cout << this->m_anList[nIndex] << endl; //<- gives '0'??? Not Expected
return this->m_anList[nIndex];
}
int main()
{
int test_array[10] = {1,2,3,4,5,6,7,8,9};
IntList test(test_array);
test[2];
return 0;
}
Я использовал его на char * раньше, и это сработало.char = 1 байт, int = 2 байта, но memcpy применяется к void *.
Обновлен код / решение (спасибо Робу (который указал на мою самую фундаментальную из нескольких ошибок) и всемЯ не CS выпускник, но буду пытаться писать лучше в будущем. Еще раз спасибо.)
#include <stdint.h>
#include <cstring>
#include <cstdlib>
#include <iostream>
//#include <algorithm>
//#include <vector>
using namespace std;
class IntList
{
private:
int* m_anList; //I could use std::vector in practical applications I know
//However I want to experiment what happens
public:
IntList(const int m_anList[], std::size_t n){
this->m_anList = new int[n * sizeof(int)];
memcpy(this->m_anList,m_anList,n*sizeof(m_anList[0]));
cout << this->m_anList[4] << endl;
}
~IntList(){
if(this->m_anList)
delete[] this->m_anList;
}
int& operator[] (const int& nIndex);
};
int& IntList::operator[] (const int& nIndex)
{
cout << this->m_anList[nIndex] << endl;
return this->m_anList[nIndex];
}
int main()
{
int hello[10] = {1,2,3,4,5,6,7,8,9};
//cout << hello[3] << endl;
IntList test(hello,10);
test[2];
return 0;
}