由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - What is wrong with the constructor (or the code)?
相关主题
[合集] C++问题(copy constructor)最初级的白痴C++问题
What is wrong with the constructor calling?两个继承问题
数组弱问为什么我看不懂下面的code,是不是水平还不够?
还有一个问题g++-2.95 -> g++-3.3/3.4
a simple question for C++ class请教函数 INIT 怎么能free memory
请问一个exception题目C++疑问
关于 VC++ vitual, reload 和 derive的一个问题...What happens when recursion functions are declared inline?
发个初级面试题two c++ interview questions! (转载)
相关话题的讨论汇总
话题: point话题: pdata话题: rectdata话题: ptr话题: rectangle
进入Programming版参与讨论
1 (共1页)
c**********e
发帖数: 2007
1
Result: Segmentation fault
____________________________
#include
#include
using namespace std;
class Point {
public:
Point(int xx, int yy):x(xx),y(yy) {}
private:
int x, y;
};
struct RectData {
Point ulhc;
Point lrhc;
};
class Rectangle {
public:
Rectangle(Point co1,Point co2) { pData->ulhc=co1; pData->lrhc=co2; }
private:
auto_ptr pData;
};
int main() {
Point coord1(0,0);
Point coord2(100,100);
Rectangle rec(coord1,coord2);
return
z****e
发帖数: 2024
2
auto_ptr 要有new 吧?没有dynamiclly allocated memory 怎么用auto_ptr?
z****e
发帖数: 2024
3
下面这个调试过了。
但是觉得改动比较大,看着很水。
等着哪位大牛给说说用auto_ptr的事了。
另外,像我这样在ctr里加一个new,op=很可能要重写的。我没写。
#include
#include
using namespace std;
class Point {
public:
Point(){}//加一个ctr
Point(int xx, int yy):x(xx),y(yy) {}
private:
int x, y;
};
struct RectData {
Point ulhc;
Point lrhc;
};
class Rectangle {
public:
Rectangle(Point co1,Point co2) {
pData=new RectData();//加一个new
pData->ulhc=co1; pData->lrhc=co2;
}
virtual ~Rectangle(){//加一个dtr
if(pData)delete pData;
z****e
发帖数: 2024
4
感觉,
1,
struct RectData {
Point ulhc;
Point lrhc;
};
这个玩意没办法初始化,因为default的ctr被你给禁止了。
2.auto_ptr pData
这个为什么不行,还不是很清楚。
z****e
发帖数: 2024
5
如果要用auto_ptr, class Rectangle implementation 改成这个:
class Rectangle {
public:
Rectangle(Point co1,Point co2):pData(new RectData) { //注意加new
pData->ulhc=co1; pData->lrhc=co2;
}
private:
auto_ptr pData;
};
感觉auto_ptr=new RectData();这个是错的。
希望有大侠给解释一下auto_ptr的初始化注意事项。
c**********e
发帖数: 2007
6
zaoxie,
Thank you for all your input. With it, I figured it out. The problem
is the initialization/assignment of auto_ptr. For an int example,
the right/wrong way for assignment are as followings.
auto_ptr p1(new int(1)); // Ok
auto_ptr p2 = new int(2); // Error, explicit constructor
Yes, RectData also needs a constructor. Thank you. The following code works.
____________________
#include
#include
using namespace std;
class Point {
public:
Point(int xx, int y
t****t
发帖数: 6806
7
初学者还是不要用auto_ptr的好, 一不小心就错了. 可以说是步步陷阱.
直接用tr1::shared_ptr好了.

【在 z****e 的大作中提到】
: 如果要用auto_ptr, class Rectangle implementation 改成这个:
: class Rectangle {
: public:
: Rectangle(Point co1,Point co2):pData(new RectData) { //注意加new
: pData->ulhc=co1; pData->lrhc=co2;
: }
: private:
: auto_ptr pData;
: };
: 感觉auto_ptr=new RectData();这个是错的。

z****e
发帖数: 2024
8
弟子谨遵。

【在 t****t 的大作中提到】
: 初学者还是不要用auto_ptr的好, 一不小心就错了. 可以说是步步陷阱.
: 直接用tr1::shared_ptr好了.

c*****o
发帖数: 178
9
auto_ptr p2 = new int(2); // Error, explicit constructor
这个错误好像是因为不能直接将一个地址或对象赋给auto_ptr。可能因为auto_par中的
重载的assignment operator不允许这样,只允许将一个auto_ptr赋给另一个auto_ptr

works.

【在 c**********e 的大作中提到】
: zaoxie,
: Thank you for all your input. With it, I figured it out. The problem
: is the initialization/assignment of auto_ptr. For an int example,
: the right/wrong way for assignment are as followings.
: auto_ptr p1(new int(1)); // Ok
: auto_ptr p2 = new int(2); // Error, explicit constructor
: Yes, RectData also needs a constructor. Thank you. The following code works.
: ____________________
: #include
: #include

1 (共1页)
进入Programming版参与讨论
相关主题
two c++ interview questions! (转载)a simple question for C++ class
请教一个作用域的问题请问一个exception题目
为什么不能成功排序关于 VC++ vitual, reload 和 derive的一个问题...
请教一个C++的编程发个初级面试题
[合集] C++问题(copy constructor)最初级的白痴C++问题
What is wrong with the constructor calling?两个继承问题
数组弱问为什么我看不懂下面的code,是不是水平还不够?
还有一个问题g++-2.95 -> g++-3.3/3.4
相关话题的讨论汇总
话题: point话题: pdata话题: rectdata话题: ptr话题: rectangle