私はsomereasonのために私はそれをしたい前に、私のオブジェクトのD'のTORが呼び出されると、それは私のコードをクラッシュさせ、イマイチの作業を演算子オーバーロードで自分のint型配列のクラスが、気にいらをinitiallizeしようとした:なぜ、それはしてはいけないのですか?
#include "stdafx.h"
#include "Array.h"
int _tmain(int argc, _TCHAR* argv[])
{
Array arr(6);
arr[3] = 6; //code crashes here
printf("%d\n", arr[0]);
return 0;
}
と今クラス: ヘッダファイル:
#pragma once
#include <malloc.h>
class Array
{
public:
//ctor dtor and operator overloading
Array(int);
Array(int *, int);
~Array();
Array operator[](int i);
//here memebers are defined
int *arr;
int size;
};
---- CPPファイル---
#include "stdafx.h"
#include "Array.h"
//the function mallocs size for the array.
Array::Array(int g = 1) :size(g) //diplomatic value for size =1
{
this->arr = (int*)malloc(sizeof(int) * this->size);
}
Array::Array(int *p, int m_size=1) :arr(p), size(m_size)
{}
Array::~Array()
{
delete arr;
}
この機能の後に私のOBJ operator[]
関数値によってArray
オブジェクトを返すので、ECTは
Array Array::operator[] (int i){
for (int j=0; j < i; ++j)
{
++(this->arr);
}
return *this;
}
なしまったく意味をなさないについて読むことをお勧めしたいです。しかし、あなたの大きな問題は、3つのルールに正しく従わないことです。 –
私はそのコードをコンパイルすると信じられません –
実際には、このコードは素晴らしいです。意図した目的ではなく、例として挙げられます。このコードは、奇跡的な理由からうまく構成されているようですが、ほとんどの部分は、一般的なイディオムや期待とはまったく異なるものです。 –