小编sol*_*lti的帖子

按值传递时shared_ptr如何增加计数器?

我在下面有此示例代码。我对RVO(返回值优化)以及如何在优化过程中跳过复制构造函数和赋值运算符一无所知,而返回值则直接放在左侧的内存中。因此,如果RVO共享了指针,共享指针如何知道何时增加其计数器?因为某种原因,我认为共享指针类会根据复制的数量或分配的数量知道何时增加计数器。

#include <iostream>
#include <memory>
using namespace std;
class A{
public:
    A(){}
    A(const A& other){ std::cout << " Copy Constructor " << std::endl; }
    A& operator=(const A&other){
        std::cout << "Assingment operator " <<  std::endl;        
        return *this;
    }    
    ~A(){
        std::cout << "~A" <<  std::endl;
    } 
};

std::shared_ptr<A> give_me_A(){
    std::shared_ptr<A> sp(new A);
    return sp;
}

void pass_shared_ptr_by_val(std::shared_ptr<A> sp){

    std::cout << __func__ << ": count  sp = " << sp.use_count() << std::endl;
    std::shared_ptr<A> sp1 = sp;
    std::cout << __func__ << ": count  sp …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers shared-ptr rvo

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

如何在其他文件中使用类的一个文件朋友制作非成员函数?

可以说我有一个档案

// Xh(第一个文件)

#include <iostream>
class X{
    int x;
public:
    X(int i);
    void print_me();
};
Run Code Online (Sandbox Code Playgroud)

// X.cpp(第二个文件)

#include "X.h"
X::X(int i){x = i}

void X::print_me(){std::cout<< x << endl;}
Run Code Online (Sandbox Code Playgroud)

// main.cpp(第三个文件)

#include "X.h"

void swap(int lhs, int rhs){
  // do the swap
}

class Y{
   X x_obj;
public: 
    friend void swap(Y& lhs, Y& rhs){
        swap(lhs.x_obj.x, rhs.x_obj.x);
    }

};
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何让main.cpp中的Y级成为X的朋友?

我想把Y类打成.h和.cpp文件并将Yh文件包含在Xh中并从那里开始.除此之外还有什么办法吗?我的意思是在代码的当前条件下使Y成为X的朋友:

我在当前条件下得到的错误是:

> In file included from main.cpp:1:0: X.h: In function 'void swap(Y&,
> Y&)': X.h:3:9: error: 'int X::x' …
Run Code Online (Sandbox Code Playgroud)

c++ friend

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

什么在c ++中是什么意思?

我试图理解| =在c ++中,我有示例代码

 int x = 0 ;

 x |= 3;
 std::cout<<x <<std::endl;

 x |= 6;
 std::cout<<x <<std::endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

3
7
Run Code Online (Sandbox Code Playgroud)

这怎么可能,它与位加法有关吗?

c c++

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

为什么匿名命名空间会给出重定义错误?

我有两个不同的文件algo1.halgo2.h.在他们里面我有匿名命名空间tolerance.

algo1.h

namespace algo {
namespace {
double tolerance = 1e-6;
}
void algo1() {
  //
}
}  // namespace algo
Run Code Online (Sandbox Code Playgroud)

alo2.h

namespace algo {
namespace {
double tolerance = 1e-6;
}
void algo2() {
  //
}
} // namespace algo
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "algo1.h"
#include "algo2.h"

int main() { algo::algo1(); }
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到错误

错误:重新定义'容差'

我以为匿名命名空间只驻留在一个翻译单元中.这就是匿名命名空间的重点.可能是我错过了什么.任何人都可以帮助知道我为什么会收到此错误?

还有一些很好的选择设计,我可以宣布所有的容忍namespace algo.

c++

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

如何在c ++中将函数推入数组?

假设我在c ++中具有void类型的函数

例如:

void fun1(); 
void fun2();
void fun3();
Run Code Online (Sandbox Code Playgroud)

我怎样才能将这些功能推入数组?例如:

array[0] = fun1();
array[1] = fun2();
array[2] = fun3();
Run Code Online (Sandbox Code Playgroud)

c c++ arrays

-1
推荐指数
1
解决办法
481
查看次数

我们如何确定IP地址的类别?

我目前正在尝试了解IP地址的类别。我遇到了两种确定IP地址类别的方法:

1)格式(例如NHHH = A级,NHHH = B级)

2)IP地址开头的位(例如0xxx.xxxx.xxxx = A类)

IP类别的标识是由1 && 2(即我满足规则1和2)规则还是1 ||确定的?2(我的意思是满足规则1或2)?

For 128.138.243.100/26

Address:   128.138.243.100       10000000.10001010.11110011.01 100100
Netmask:   255.255.255.192 = 26  11111111.11111111.11111111.11 000000
Wildcard:  0.0.0.63              00000000.00000000.00000000.00 111111
=>
Network:   128.138.243.64/26     **10**000000.10001010.11110011.01 000000 (Class B)
Broadcast: 128.138.243.127       10000000.10001010.11110011.01 111111
HostMin:   128.138.243.65        10000000.10001010.11110011.01 000001
HostMax:   128.138.243.126       10000000.10001010.11110011.01 111110  
Hosts/Net: 62                    
Run Code Online (Sandbox Code Playgroud)

如果我们传递规则1,128.138.243.100 / 26怎么可能是B类。由于规则1表示B类应该是NNHH,但在上面的示例中,IP地址的N部分显然超出了NNN(此处甚至侵犯了BNN的两位) H )。

ip networking system-administration

-1
推荐指数
1
解决办法
3523
查看次数