小编rav*_*avi的帖子

std :: deque什么时候需要重新分配?

据我所知,std::deque它的元素存储在大块的块中(尽管它依赖于实现,但这是我在大多数资源中所读到的),而std::vector在大多数情况下,它只使用一个内存块。

因此,std::vector在插入过程中遇到重新分配是很合理的。但是,我无法说明需要重新分配的任何情况,std::deque因为当电流耗尽时,它只是从新的内存块重新开始。

有人能提供我一些情况std::deque需要重新分配的情况吗?

c++ deque

5
推荐指数
2
解决办法
472
查看次数

为什么std :: unary_function不包含虚析构函数

我遇到了课堂模板std::unary_functionstd::binary_function.

template <class Arg, class Result>
struct unary_function {
    typedef Arg argument_type;
    typedef Result result_type;
};

template <class Arg1, class Arg2, class Result>
struct binary_function {
    typedef Arg1 first_argument_type;
    typedef Arg2 second_argument_type;
    typedef Result result_type;
};
Run Code Online (Sandbox Code Playgroud)

这两者都可以用作特定目的的基类.但仍然没有虚拟析构函数.我可以猜到的一个原因是这些并不意味着要进行多态处理.即

std::unary_function* ptr; 
//intialize it 
//do something
delete ptr;
Run Code Online (Sandbox Code Playgroud)

但如果是这样的话,不应该在析构函数中使用protected访问说明符,这样编译器就会破坏任何尝试.

c++ virtual destructor

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

在异常情况下将临时对象绑定到非常量引用

我一直读到,在函数调用的情况下,临时变量只能与非常量引用参数绑定。

情况1:-

例如:-

class Simple{
    public: 
       int i;
       Simple(Simple &f)
       {
         i = f.i + 1;
       }
       Simple(int j)
       {
         i = j;
       }
  };

int main()
{
   Simple f1 = Simple(2);   // error no matching call fruit::fruit(fruit)...
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会给我错误,因为我试图用非常量引用参数临时绑定。

案例2:-

try
{
 throw e;
}
catch ( exception& e )
{
}
Run Code Online (Sandbox Code Playgroud)

我已经了解到,当我们抛出异常时,真正传递给 catch 的是抛出的原始异常的副本,即为抛出的对象创建一个临时对象,然后将其传递给 catch 子句。

catch 正在做的是通过非常量引用来捕获这个异常。这与我在案例 1 中展示的相反。

所以,我的问题是:-

1) 是否有允许临时绑定到非常量引用的特定场景。

2)如果有那么在允许这些例外时考虑了哪些因素。

c++ temporary-objects

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

通过网络发送“application/x-www-form-urlencoded”数据代替 JSON

我用来通过网络序列化的结构的定义

pub struct NetworkData {
    id: String,
    status: String,
    details: <Data Structure>,
}
Run Code Online (Sandbox Code Playgroud)

现在有一个函数接受这个结构,将其序列化并通过网络发送。

fn send_data(data: NetworkData ...) -> ... {
    let data = serde_json::to_string(&data).expect("serialize issue");

    let mut request = Request::new(reqwest::Method::POST, url);
    *request.body_mut() = Some(data.into());

    self.inner
        .execute(request)
        ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过网络发送“x-www-form-urlencoded”数据,这应该更改此功能如下:-

fn send_data(data: NetworkData ...) -> ... {
    // How should I change this?????
    //let data = serde_json::to_string(&data).expect("serialize issue");

    let mut request = Request::new(reqwest::Method::POST, url);
    let content_type = HeaderValue::from_str(&format!("{}", "application/x-www-form-urlencoded",))
            .expect("Header value creation bug");
    request
        .headers_mut()
        .insert(header::CONTENT_TYPE, content_type);        
    *request.body_mut() = Some(data.into()); …
Run Code Online (Sandbox Code Playgroud)

rust serde

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

如何使用 log4rs 的 RollingFileAppender 来合并滚动日志记录?

我正在尝试基于滚动策略构建一个记录器。以下是我能够实现的最接近的:

let logfile = FileAppender::builder()
    .encoder(Box::new(PatternEncoder::new("{d} {l}::{m}{n}")))
    .build("log/output.log")?;

let config = Config::builder()
    .appender(Appender::builder().build("logfile", Box::new(logfile)))
    .build(Root::builder()
                .appender("logfile")
                .build(LevelFilter::Debug))?;

log4rs::init_config(config)?;
Run Code Online (Sandbox Code Playgroud)

这帮助我记录所有级别的消息。但是,长时间记录到文件可能是一个危险的提议。因此,我正在寻找可以限制保留的日志数据量的东西。我遇到过RollingFileAppender,但找不到Policy.

请指导我完成这个。我主要是在寻找程序化配置。

rust

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

标签 统计

c++ ×3

rust ×2

deque ×1

destructor ×1

serde ×1

temporary-objects ×1

virtual ×1