【发布时间】:2014-11-15 05:02:53
【问题描述】:
我写了一个看起来像这样的类
class Mesh {
public:
vector<Vertex> vs;
}
Vertex 在哪里
class Vertex {
public:
const double x, y, z;
}
我有一个从文件加载Mesh 的函数:
shared_ptr<Mesh> load_mesh(string filename) {
//....
vector<Vertex> vs;
Vertex v(1, 2, 3);
vs.push_back(v);
return shared_ptr<Mesh>(Mesh(vs));
}
我的问题是关于Vertex 和vector 的范围。
一个或两个会超出范围吗?
哪些(如果有)是首选?
class Mesh1 {
public:
vector<shared_ptr<Vertex>> vs;
}
class Mesh2 {
public:
shared_ptr<vector<Vertex>> vs;
}
class Mesh3 {
public:
shared_ptr<vector<shared_ptr<Vertex>>> vs;
}
或者有没有更好/更简单的方法来处理这个问题?
【问题讨论】:
-
您的原件应该没问题。
push_back将v的副本存储在本地vs中;并鉴于您声明Mesh的方式,构建一个应该复制本地vs及其所有元素。局部变量将超出范围并被销毁,但Mesh中的副本是安全的。 -
啊,抱歉,已解决。感谢您的回复!
-
好像你在问函数内部对象的范围,而不是类内部的类范围。
-
您确定不要
std::vector<Vertex>? -
-1 不是真正的代码。即使添加了所有缺少的分号,此代码也不会编译。也就是说,忘记
new:返回你想返回的任何东西,让编译器担心优化。添加代价高昂的动态分配和间接分配不一定是提高性能的最佳方式。