dec*_*iar 2 c++ boost pointers shared-ptr ptr-vector
我只想拥有一双新鲜的眼睛,以下代码是正确的:
对象trifoo中包含的指针(存储在ptr_vector中)是共享指针f,g,h.
另外,在trifoo的构造函数中shared_ptr副本的结果是什么; 这是'共享'shared_ptr的正确方法,确保参考计数增加等.我所有其他疑问我能够测试验证,但我不知道如何检查(正确).任何批评也是受欢迎的.
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/shared_ptr.hpp>
class foo {
int a, b;
public:
foo(int A, int B) : a(A), b(B) {}
};
typedef boost::shared_ptr<foo> foo_ptr;
class trifoo {
foo_ptr c, d, e;
public:
trifoo(const foo_ptr& C, const foo_ptr& D, const foo_ptr& E) : c(C), d(D), e(E) {}
};
int main() {
for (int i = 0; i < 5000000; i++) {
foo_ptr f(new foo(1,2));
foo_ptr g(new foo(2,3));
foo_ptr h(new foo(4,5));
boost::ptr_vector<trifoo> tris;
tris.push_back(new trifoo(f, g, h));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:无意义的循环是测试内存泄漏,其中没有发生.
代码似乎在技术上是正确的.
shared_ptr然而,复制a的语义是增加了所引用对象的引用计数.它只是有效.没什么好担心的.
但是有些风格问题:
shared_ptr通过引用传递或声明它const是没有意义的.那是因为它总是可以被复制.只是shared_ptr按价值传递那些.
在实际可能的情况下使用构造函数初始化列表而不是赋值.
三个人new用不同的表达方式非常好.它避免了异常的安全隐患.但更好的是,将创建逻辑放在工厂函数中.
干杯&hth.,
| 归档时间: |
|
| 查看次数: |
4373 次 |
| 最近记录: |