【发布时间】:2012-03-02 15:10:31
【问题描述】:
foo.h
#include "class1.h"
class foo{
private:
class1* class1ObjectPointer;
public:
foo();
virtual ~foo();
void foomethod();
}
foo.cpp(版本 1)
#include "foo.h"
foo::foo()
{
this->class1ObjectPointer = new class1();
}
foo::~foo()
{
if( this->class1ObjectPointer != NULL ){
delete class1ObjectPointer;
this->class1ObjectPointer = NULL;
}
}
foo::foomethod(){
*(this->class1ObjectPointer) = some_method();
//suppose some method returns an object of class1
}
foo.cpp(版本 2)
#include "foo.h"
foo::foo()
{
this->class1ObjectPointer = NULL;
}
foo::~foo()
{
if( this->class1ObjectPointer != NULL ){
delete class1ObjectPointer;
this->class1ObjectPointer = NULL;
}
}
foo::foomethod(){
class1 object;
object = some_method();
//suppose some method returns an object of class1
this->class1ObjectPointer = new class1(object); // copy constructor
}
以下情况下哪种指针赋值更好:
- class1 的对象始终具有固定大小(例如,其中包含固定变量的类)
- class1 的对象可能具有可变大小的成员(例如,其中包含可能具有不同大小的矩阵的类)
你会建议任何其他更好的方法来做我在这些 sn-ps 中所做的事情吗?
【问题讨论】:
-
你的问题是什么?目前还不清楚你在挣扎什么以及你在问什么。
-
@DavidHeffernan 我需要创建一个
class1的对象,它可以具有可变大小,并且不知道哪种分配空间的方式更好。 -
代码中被标识为复制构造函数的东西不是复制构造函数。复制构造函数不接受指针。
-
@BenjaminLindley 复制构造函数不会引用要复制的对象作为输入吗?
-
@Matteo:是的,但是通过在对象前面加上
&,您提供的是指针,而不是引用。从调用者的角度来看,通过引用获取参数的函数与通过值获取参数的函数没有区别。
标签: c++ pointers memory-management constructor copy-constructor