我有一个情况,其中i有一个指针到一个STL矢量实例化新的STL矢量
所以像
vector<MyType*>* myvector;
我必须设置在构造该指针为NULL,然后延迟加载时财产被触动。
我怎样才能实例化这一个向量的新实例?
我有一个情况,其中i有一个指针到一个STL矢量实例化新的STL矢量
所以像
vector<MyType*>* myvector;
我必须设置在构造该指针为NULL,然后延迟加载时财产被触动。
我怎样才能实例化这一个向量的新实例?
我必须设置这个指针为NULL的构造函数,然后懒当财产被触摸时加载。
我怎样才能实例化这个向量的新实例?
我不知道我理解你的所有道路。为什么不简单地将矢量留空,并设置一个布尔值来表示该属性是否已加载?另外,您也可以使用boost::optional
boost::optional< vector<MyType*> >
或者
boost::optional< vector< shared_ptr<MyType> > >
然后,您可以简单地通过取消引用可选对象接收对象,和矢量分配给它像往常一样。
我不会使用这个指针。这件事复杂,你要想想,当你复制包含的属性的对象会发生什么,...
如果你真的要使用一个指针,你可以做这样的
struct A {
A():prop() { }
~A() { delete prop; }
vector< MyType *>& get() {
if(!prop) prop = new vector< MyType* >();
return prop;
}
private:
// disable copy and assignment.
A(A const&);
A& operator=(A const&);
vector< MyType* > *prop;
};
或使用shared_ptr
,这将是我的程序中的方式(但boost :: optional仍然是第一个选项,之后将是vector-and-boolean选项,之后将为以下内容)
struct A {
typedef vector< shared_ptr<MyType> > vector_type;
vector_type &get() {
if(!prop) {
prop.reset(new vector_type);
}
return *prop;
}
private:
// disable copy and assignment.
A(A const&);
A& operator=(A const&);
shared_ptr<vector_type> prop;
};
复制和分配被禁用,因为他们ld分享场景背后的道具(浅层副本),这些道具应清晰地记录或通过在这些功能中进行深层复制来禁用。
myvector = new std::vector<yourtype>;
那么要初始化它,您至少需要将它设置为NULL或使用该语法的下面的实例。你也应该按照字段声明的顺序来做,否则可能会发生奇怪的事情。
// Field.
std::vector<int> *myvector;
// Constructor.
myclass() : myvector(new std::vector<int>)
{
}
假设你定义矢量正确:
vector<int>* myvector; // Note vector must be parametrized with a type.
// There is no such thing as a a naked vector.
初始化为NULL
myclass::myclass()
:myvector(NULL) // You can use 0 here but I still like NULL because it
{} // gives me more information. Waiting for the new keyword.
实例化在第一次使用:
myvectr = new vector<int>(100); // reserve some space as appropriate
但你不应该有RAW指针你班上的成员(除非有很好的理由)。您将需要编写自己的拷贝构造函数和赋值运算符。
或者,您也可以用智能指针包裹'myvector'。或者更好地使它成为一个正常的矢量。没有必要将它作为指针。因为向量是一个模板类,并且必须有一个类型
vector* myvector;
:
你不能haved这样的指针。你可以说:
vector <int> * myvector = 0;
或:
vector <string> * myvector = 0;
,然后动态地创建矢量:
myvector = new vector <string>;
这是我多一点C++'ish将myvector设置为0而不是NULL。 – 2009-06-09 14:54:38