#include<iostream>
class stack {
public:
stack(int size) {
datas = new int[size];
top = -1;
this->size = size;
}
~stack(){
if(datas)
delete[] datas; //use array delete so you don't leak!!
}
int *datas ;
int top;
int size;
};
class node {
public:
node(int size){
s = new stack(size);
}
~node()
{
if(s)
delete s;
}
node *next;
node *prev;
stack *s;
};
using namespace std;
int main()
{
node *n = new node(300);
node *n1 = new node(300);
for (int i = 0; i < 300; i++) {
n->s->datas[i] = i;
n1->s->datas[i] = n->s->datas[i];
cout << n1->s->datas[i] << endl;
}
cout << "test";
if(n)
delete n; //clean up n
if(n1)
delete n1; //clean up n1
}
На практике никто не пишет подобный код специально, потому что он подвержен ошибкам и не имеет каких-либо исключений безопасности. Я надеюсь, что это для класса, а не для ничего производства. В будущем рассмотрим std :: vector для динамических массивов или std :: array для массивов фиксированного размера, и нет ничего плохого в том, чтобы держать несколько переменных в стеке. Нет необходимости, чтобы n или n1 были указателем в вашем случае использования. Наконец, я прошу прощения за форматирование кода, поскольку я не на ПК. Это RAII. Это простой шаблон проектирования, позволяющий избежать утечки данных. Выделите в своих конструкторах, освободите в своих деструкторах. Этот код, однако, далеко не исключение безопасности. Любой из вызовов new может вызвать исключение нехватки памяти.