h******6 发帖数: 5 | 1 下面的这段代码为什么会出错? 谢谢!
#include
#include
class Stack{
public:
Stack();
~Stack(){delete[] _buffer;}
private:
const int _capacity;
int _size;
int *_buffer;
Stack & operator = (const Stack& rhs );
};
Stack::Stack():_capacity(10), _size(0){
_buffer = new int[_capacity];
}
int main(){
std::vector stackArray(3);
} |
z****e 发帖数: 2024 | 2 vector 要求要可以拷贝,你没有定义拷贝构造函数,而恰恰是因为这个错误,编译器
自动生成的浅拷贝,被析构的时候,delete了。然后再次被delete,是重复delete问题。
你要避免这个错误,就要写一个深拷贝的拷贝构造函数。 |
z****e 发帖数: 2024 | 3 Stack(const Stack& s):_capacity(s._capacity), _size(s._size){
if(s._buffer){
_buffer=new int[_capacity];
std::copy(s._buffer, s._buffer+_capacity, _buffer);
}
else
_buffer=0;
}; |
p****o 发帖数: 1340 | 4 std::vector uses copy to initial the vector: basically the same Stack object
is copied three times to fill stackArray.
it is efficient for most cases, while failed here... |
h******6 发帖数: 5 | |
d****e 发帖数: 251 | 6 I have two questions:
1. Is it enough to only copy [0, _size)?
2. Is it necessary to check if s._buffer is null?
【在 z****e 的大作中提到】 : Stack(const Stack& s):_capacity(s._capacity), _size(s._size){ : if(s._buffer){ : _buffer=new int[_capacity]; : std::copy(s._buffer, s._buffer+_capacity, _buffer); : } : else : _buffer=0; : };
|
i*****e 发帖数: 113 | 7 这里有一个问题
如果自己copy自己的时候,内存就泄露了
Stack(const Stack& s):_capacity(s._capacity), _size(s._size){
if(s._buffer){
_buffer=new int[_capacity];
std::copy(s._buffer, s._buffer+_capacity, _buffer);
}
else
_buffer=0;
};
【在 z****e 的大作中提到】 : Stack(const Stack& s):_capacity(s._capacity), _size(s._size){ : if(s._buffer){ : _buffer=new int[_capacity]; : std::copy(s._buffer, s._buffer+_capacity, _buffer); : } : else : _buffer=0; : };
|
z****e 发帖数: 2024 | 8 你是不是在搞笑?
你没有被构造的时候,哪里来得自己?
【在 i*****e 的大作中提到】 : 这里有一个问题 : 如果自己copy自己的时候,内存就泄露了 : : Stack(const Stack& s):_capacity(s._capacity), _size(s._size){ : if(s._buffer){ : _buffer=new int[_capacity]; : std::copy(s._buffer, s._buffer+_capacity, _buffer); : } : else : _buffer=0;
|
t****t 发帖数: 6806 | 9 as a copy *constructor*, it is impossible to copy itself.
you are referring to operator=, which i believe zaoxie took care of.
【在 i*****e 的大作中提到】 : 这里有一个问题 : 如果自己copy自己的时候,内存就泄露了 : : Stack(const Stack& s):_capacity(s._capacity), _size(s._size){ : if(s._buffer){ : _buffer=new int[_capacity]; : std::copy(s._buffer, s._buffer+_capacity, _buffer); : } : else : _buffer=0;
|
z****e 发帖数: 2024 | 10 i don't know.
it depends on particular implementation.
what i wrote is just 随手写个。
【在 d****e 的大作中提到】 : I have two questions: : 1. Is it enough to only copy [0, _size)? : 2. Is it necessary to check if s._buffer is null?
|
i*****e 发帖数: 113 | 11 恩,的确当成operator=了
as a copy *constructor*, it is impossible to copy itself.
you are referring to operator=, which i believe zaoxie took care of.
【在 t****t 的大作中提到】 : as a copy *constructor*, it is impossible to copy itself. : you are referring to operator=, which i believe zaoxie took care of.
|