由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个 std::vector 的基本问题
相关主题
为什么在overloading中,friend <<不能读取private值呢?问个C++的问题 friend operator
Why should i include .cpp instead of .h问个c++的template的问题
为啥gcc找不到类的构造函数?Is it possible to initialize container in initialization list?
c++小问题C++问题,confusing...
一个C++ operator new的重载问题[合集] 关于template和inheritance的问题请教
vector在constructor里初始化一个关于assignment constructor和expection的问题
这个类的default constructor怎么写[合集] 怎样有效的传递C静态数组的变量名?
问个char*的问题What's problem with this piece of code using stl map?
相关话题的讨论汇总
话题: stack话题: buffer话题: capacity话题: int话题: copy
进入Programming版参与讨论
1 (共1页)
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
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.

1 (共1页)
进入Programming版参与讨论
相关主题
What's problem with this piece of code using stl map?一个C++ operator new的重载问题
一个关于C++ template和overload的问题vector在constructor里初始化
conversion between const to nonconst这个类的default constructor怎么写
编译器如何分辨返回类型不同的函数?问个char*的问题
为什么在overloading中,friend <<不能读取private值呢?问个C++的问题 friend operator
Why should i include .cpp instead of .h问个c++的template的问题
为啥gcc找不到类的构造函数?Is it possible to initialize container in initialization list?
c++小问题C++问题,confusing...
相关话题的讨论汇总
话题: stack话题: buffer话题: capacity话题: int话题: copy