boost::shared_ptr 有一个不寻常的构造函数
template<class Y> shared_ptr(shared_ptr<Y> const & r, T * p);
Run Code Online (Sandbox Code Playgroud)
我对这对什么有用感到有些疑惑.基本上它与股份共享r,但.get()将返回p.不 r.get()!
这意味着您可以执行以下操作:
int main() {
boost::shared_ptr<int> x(new int);
boost::shared_ptr<int> y(x, new int);
std::cout << x.get() << std::endl;
std::cout << y.get() << std::endl;
std::cout << x.use_count() << std::endl;
std::cout << y.use_count() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
0x8c66008
0x8c66030
2
2
Run Code Online (Sandbox Code Playgroud)
请注意,指针是分开的,但它们都声称具有use_count2(因为它们共享同一对象的所有权).
因此,所int拥有的x将存在只要x 或 即将存在y.如果我理解文档是正确的,那么第二个int永远不会被破坏.我通过以下测试程序证实了这一点:
struct T {
T() { std::cout << …Run Code Online (Sandbox Code Playgroud) 这是一个最佳实践问题.我正在制作一个阵列
type * x = malloc(size*sizeof(type));
Run Code Online (Sandbox Code Playgroud)
AFAIK sizeof给出size_t的返回值.这是否意味着我应该使用size_t来声明或传递大小?另外,当索引数组时,我还应该使用size_t作为索引变量吗?这些最佳做法是什么?这不是他们在学校教的东西,而现在我正在深入了解我想知道的严肃的c ++.
此外,如果有人参考我可以找到这种东西的最佳实践,它会有帮助吗?程序员预订的礼仪.
编辑:malloc应该是cudaHostAlloc,或cudaMalloc,因为我正在开发一个同时在设备和主机上存储数组的类,并同时更新它们.所以malloc在这里只是我实际要做的事情的持有者.
我在类,嵌套类中有一个类
class A {
public:
int a;
int b;
class B {
int c;
int d;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个过程中,我在堆中分配了B类的对象指针.
B *bobj = new B();
A *a;
auto_ptr<A> A1(new A());
a = A1.release();
Run Code Online (Sandbox Code Playgroud)
删除a,删除bobj也是?
delete a;
Run Code Online (Sandbox Code Playgroud)
还是我们应该明确删除子类指针?
这是在我不写的代码中,我把日志放在所有的alloc和deallocs上,我看到B *bobj = new B(),为此没有删除,对于A的对象ptr,有一个删除.然而,没有内存泄漏.这就是为什么我怀疑在这种情况下会发生什么.