相关疑难解决方法(0)

C++ 17引入了哪些评估顺序保证?

在典型的C++代码中,C++ 17评估顺序保证(P0145)投票的含义是什么?

对于像这样的事情,它有什么变化

i=1;
f(i++, i)
Run Code Online (Sandbox Code Playgroud)

std::cout << f() << f() << f() ;
Run Code Online (Sandbox Code Playgroud)

要么

f(g(),h(),j());
Run Code Online (Sandbox Code Playgroud)

c++ operator-precedence c++17

77
推荐指数
2
解决办法
7130
查看次数

如何使用shared_ptr避免内存泄漏?

请考虑以下代码.

using boost::shared_ptr;
struct B;
struct A{
    ~A() { std::cout << "~A" << std::endl; }
    shared_ptr<B> b;    
};
struct B {
    ~B() { std::cout << "~B" << std::endl; }
    shared_ptr<A> a;
};

int main() {
    shared_ptr<A> a (new A);
    shared_ptr<B> b (new B);
    a->b = b;
    b->a = a;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有输出.没有调用desctructor.内存泄漏.我一直认为智能指针有助于避免内存泄漏.

如果我需要在类中进行交叉引用,我该怎么办?

c++ boost memory-leaks smart-pointers shared-ptr

23
推荐指数
1
解决办法
2万
查看次数

查找由智能指针引起的内存泄漏

有没有人知道发现智能指针引起的内存泄漏的"技术"?我目前正在开发一个用C++编写的大型项目,该项目大量使用带引用计数的智能指针.显然我们有一些由智能指针引起的内存泄漏,它们仍然在代码中的某处被引用,因此它们的内存不会被释放.很难找到带有"不必要"引用的代码行,导致相应的对象不被释放(尽管它不再使用).

我在网上找到了一些建议,建议收集参考计数器的递增/递减操作的调用堆栈.这给了我一个很好的提示,哪一段代码导致参考计数器增加或减少.

但我需要的是某种算法将相应的"增加/减少调用堆栈"组合在一起.在删除这些调用堆栈之后,我希望(至少)剩下一个"增加调用堆栈",它向我显示带有"不必要"引用的代码段,这导致相应的对象不被释放.现在修复泄漏没什么大不了的!

但有人想知道进行分组的"算法"吗?

开发在Windows XP下进行.

(我希望有人理解,我试图解释......)

EDIt:我说的是循环引用造成的泄漏.

c++ pointers memory-leaks smart-pointers

18
推荐指数
2
解决办法
9934
查看次数