小编Cor*_*ein的帖子

堆分配成员引用是一个可怕的想法?为什么?

为了最好地解释这个问题,我构建了一个简单的例子.说我有一个课程Blob如下:

class Blob
{
    string personalName;
    string& familyName;
}
Run Code Online (Sandbox Code Playgroud)

A Blob可以由Creator(又名程序员)产生,此时它可以选择一个personalName,因为它有权成为第一代Blob,它可以选择它自己的familyName.

或者,Blob可以通过产生现有的东西来创建a Blob,此时它会选择它自己的personalName,但是familyNameBlob在该族中克隆的所有其他s 共享.如果Blob更改姓氏,则所有其他家庭成员将自动更改该名称.

到目前为止,这听起来都很好,直到编写Blob构造函数时我才看到:

Blob::Blob() :
    personalName(pickName()),
    familyName(pickFamilyName())
{ }

...

string& Blob::pickFamilyName()
{
    return *(new string("George"));
}   // All Blobs have family name "George" in this example
Run Code Online (Sandbox Code Playgroud)

伊克!在堆上分配内存然后将其分配给引用变量?!这看起来很吓人!

我的直觉是否正确,这有什么不妥之处,或者它只对我感到陌生,因为它不是一个常见的模式?如果出现问题,那是什么?为什么这是一个糟糕的设计?

注意:通过引用计数释放堆分配的内存并在最后一个Blob被破坏时删除内存或通过其他方法释放内存非常重要.

c++ memory heap reference

7
推荐指数
2
解决办法
3568
查看次数

我的Kubernetes运行的是什么版本的Docker?

Kubernetes使用Docker,而kubelet为任何给定的集群规定了兼容的Docker版本.

我的问题是,鉴于已经配置并运行的Kubernetes集群,如果我无法直接访问节点,如何找出集群中正在运行的Docker版本?

kubernetes

7
推荐指数
2
解决办法
2705
查看次数

将潜在的未来恢复到 Cats'EitherT's Left 中?

如果我有一个Future[Either[String, Int]]代表可能的错误消息 ( String) 或成功计算 ( Int) 的 ,那么将Future潜在的失败作为错误消息移动到左侧很简单:

def handleFailure(fe: Future[Either[String,Int]]) =
  f.recover({ case e: Exception => Left(s"failed because ${e.getMessage}"))
Run Code Online (Sandbox Code Playgroud)

我希望 存在类似的东西EitherT,但也许我只是找不到它的名字。它相对简单,但涉及拆箱和重新装箱这感觉笨拙的EitherT:

def handleFailureT(fe: EitherT[Future, String, Int]) =
  EitherT(handleFailure(et.value)) // See above for handleFailure definition
Run Code Online (Sandbox Code Playgroud)

Cats不久前确实添加了一个MonadError实例,但它专门用于直接恢复到right,而不是用于替换 Each 本身。

handleFailureT实现它的猫,如果是,它叫什么?

理想情况下,它看起来像这样:

class EitherT[F, A, B] {
  def handleFailureT[AA](f: PartialFunction[Throwable, AA]): EitherT[F, AA, B] = EitherT(value.recover(f))
}

// Then used like:
val et: EitherT[Future, String, …
Run Code Online (Sandbox Code Playgroud)

scala scala-cats

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

如何更改vim中空标签空间的背景颜色?

在vim中,当您创建新选项卡时,选项卡栏将显示在屏幕顶部.左边是所有标签,最右边是关闭标签的"X".在它们之间,有"空"空间,在我的屏幕上显示为白色.

我承认,我对我的终端看起来非常挑剔,屏幕顶部的这个明亮的白色条让人分心.是否可以将此颜色更改为黑色,甚至可能是灰色?

vim settings customization colors

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

你如何改变vim中的一条线?

使用vim我可以通过搭售来改变我的光标所在的单词cw.我可以改变当前的角色cl.我可以改变一些括号内的所有内容ci{.

我甚至可以改变当前和下一行cj.但是,如何更改光标所在的行?

我在寻找的东西小于或大于这些命令的一个更有效: ddko,0C,0Da,等

vim

6
推荐指数
2
解决办法
602
查看次数

如何处理QThread上的事件?

通常,如果我处于过程密集型功能中,我可以调用QCoreApplication::processEvents()QEventLoop::processEvents()确保我的处理不会阻止其他信号和插槽.

但是,如果我创建一个new QThread并将一个worker移动到该线程,那么我没有QCoreApplication或者QEventLoop可以调用它processEvents().

从我的研究来看,似乎我应该能够QEventLoopQThread我创建的新版本上安装一个,然后我可以调用processEvents()QEventLoop.

但是,我无法弄清楚如何做到这一点.我想它可能看起来像这样:

QThread *thread = new QThread(this);
Worker *worker = new Worker(this);
QEventLoop *loop = new QEventLoop();

connect(thread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(started()), worker, SLOT(startProcessing()));
connect(worker, SIGNAL(done()), thread, SLOT(quit()));
connect(worker, SIGNAL(done()), loop, SLOT(quit()));

worker->moveToThread(thread);    

//loop->exec() // blocks processing of this thread
loop->moveToThread(thread);

//loop->exec() // loop is not a member of this thread anymore and …
Run Code Online (Sandbox Code Playgroud)

c++ events qt multithreading

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

diffput到多个缓冲区?

有时在编辑三个文件时vimdiff我想将一个文件从一个文件复制到另外两个文件.通常这将完成如下:

:diffput 2
:diffput 3
Run Code Online (Sandbox Code Playgroud)

但是,:help diffput这说:

                        *:diffpu* *:diffput* *E793*
:[range]diffpu[t] [bufspec]
Run Code Online (Sandbox Code Playgroud)

这让我很好奇是否bufspec允许您指定多个缓冲区.我尝试使用文档,然后猜测,但没有运气.

:help bufspec
:diffput 2,3
:diffput 2 3
Run Code Online (Sandbox Code Playgroud)

是否可以在diffput命令中指定多个缓冲区?

vim diff vimdiff

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

在简单的示例项目中更改Spring框架日志级别?

在遵循这个 Spring示例时,我希望看到这样的输出:

Creating tables
Inserting customer record for John Woo
Inserting customer record for Jeff Dean
...
Run Code Online (Sandbox Code Playgroud)

相反,我DEBUG在每一行之间散布了一些日志消息:

Creating tables
12:31:16.474 [main] DEBUG o.s.jdbc.core.JdbcTemplate - Executing SQL statement [drop table customers if exists]
12:31:16.484 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource
12:31:16.484 [main] DEBUG o.s.j.d.SimpleDriverDataSource - Creating new JDBC Driver Connection to [jdbc:h2:mem]
...
Run Code Online (Sandbox Code Playgroud)

这些 不同的 答案似乎表明可以通过更改我的log4j.properties文件中的日志级别来解决这个问题.然而,在下面的例子春季一个log4j.properties文件从未被提及.

有趣的是,Spring确实似乎在log4j内部使用:

$ grep -R "log4j" *
Binary file build/libs/gs-relational-data-access-0.1.0.jar …
Run Code Online (Sandbox Code Playgroud)

java logging spring spring-jdbc spring-boot

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

仅包含一个元素的 Seq 表示形式?

我经常发现自己将Seq只有一个元素的 a 传递给这样的方法:

def myMethod(myList: Seq[Int]) = { ... }
Run Code Online (Sandbox Code Playgroud)

通常我这样做:

myMethod(List(42))
Run Code Online (Sandbox Code Playgroud)

但我突然想到,这可能不是最优雅的方式,如果说我喜欢 Scala 的一件事,那就是它能够在我认为不可能的情况下减少使用的字符,从而让我大吃一惊。

Seq那么,是否有比更短或更优雅的单个项目表示形式呢List(42)

我能想到几个更糟糕的选择!

42 to 42
42 :: List()
Run Code Online (Sandbox Code Playgroud)

scala

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

要访问在Docker For Desktop中本地运行的Kubernetes服务?

我正在将Docker For Desktop与内置的Kubernetes集群一起使用。我已经安装了Pod通过HTTP服务资源的,但是我不确定如何使用浏览器访问它。我具有以下ServiceSpec将流量正确路由到的内容Pod

spec:
  clusterIP: 10.99.132.220
  externalTrafficPolicy: Cluster
  ports:
  - name: myport
    nodePort: 31534
    port: 8037
    protocol: TCP
    targetPort: 80
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令查询它时,我可以看到它的设置kubectl

$ kubectl get service
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
myservice   LoadBalancer   10.99.132.220   localhost     8037:31534/TCP   1h
Run Code Online (Sandbox Code Playgroud)

如何使用浏览器访问此服务?

docker kubernetes

6
推荐指数
3
解决办法
1430
查看次数