相关疑难解决方法(0)

boost的shared_ptr(shared_ptr <Y> const&r,T*p)用于什么?

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)

c++ boost smart-pointers shared-ptr

26
推荐指数
2
解决办法
2423
查看次数

我应该使用什么类型的索引变量

这是一个最佳实践问题.我正在制作一个阵列

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在这里只是我实际要做的事情的持有者.

c++ cuda

6
推荐指数
1
解决办法
1716
查看次数

删除主类的对象指针是否也删除了嵌套类指针?

我在类,嵌套类中有一个类

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,有一个删除.然而,没有内存泄漏.这就是为什么我怀疑在这种情况下会发生什么.

c++ class subclass

3
推荐指数
1
解决办法
1781
查看次数

标签 统计

c++ ×3

boost ×1

class ×1

cuda ×1

shared-ptr ×1

smart-pointers ×1

subclass ×1