小编Dan*_*lli的帖子

使用std :: uninitialized_copy的Stroustrup示例中的资源泄漏?

在Stroustrup一书(The C++ programming language 4th ed.,§17.5.1,pag 508)中,我找到了以下一个简单Matrix类的复制构造函数示例:

template < class T >
Matrix:: Matrix( const Matrix& m ) // copy constructor
    : dim{ m.dim },
      elem{ new T[ m.size() ] }
{
    uninitialized_copy( m.elem, m.elem+m.size(), elem ); // copy elements
}
Run Code Online (Sandbox Code Playgroud)

(elem指向T元素数组的指针,声明为T* elem;).

我有两个关于这个拷贝构造函数的问题:

  1. 为什么方法首先默认构造一个m.size()元素数组,只是用uninitialized_copy调用在体内覆盖它?

  2. 在初始化时elem{ new T[ m.size() ] },T的构造函数被称为m.size()times.但是,uninitialized_copy在同一区域中构造新数组之前,正文中的算法不会调用T析构函数.这是潜在的资源泄漏吗?(注意:不是内存泄漏,资源泄漏!例如,如果T获取ctor中的锁或文件描述符并在dtor中释放它).

谢谢

c++

9
推荐指数
2
解决办法
711
查看次数

如何使用 jquery 加载 javascript 模块

我正在加载一个 javascript 文件jquery,通常使用:

// file application.js
$.getScript("module.js", function(data, textStatus, jqxhr) { ... });
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。除了module.js使用在另一个模块中声明的函数,即它包含以下语句:

// file module.js
import { myFunction } from './library.js';
Run Code Online (Sandbox Code Playgroud)

当浏览器加载我的应用程序时,它抱怨:

Cannot use import statement outside a module
Run Code Online (Sandbox Code Playgroud)

有没有办法将脚本module.js作为模块加载?

谢谢

javascript jquery es6-modules

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

什么是依赖注入库的正确隐喻?

我是一个实现依赖注入的小型C++库的作者(我想有人会称之为"IoC容器").

我一直认为找到一个很好的图书馆隐喻可以在很多方面帮助你:

  • 它简化了库的使用
  • 它有助于图书馆的作者找到正确的抽象
  • 它是检查设计完好性的指南
  • 这是为类找到有意义的名称的一种方法
  • 等等...

现在,在我的库中,我使用了设备/插件比喻:你的类是"设备",它们的依赖是"插件",你可以在另一个设备上连接插件.这是一个代码示例:

REGISTERED_CLASS( Foo ), public Device
{
...
private:
    Plug< Bar > bar;
...
};
...
catalog.Create( "myFoo", "Foo" );
catalog.Create( "myBar", "Bar" );
...
catalog[ "myFoo" ].Plug( "bar" ).Into( catalog[ "myBar" ] );     // this means myFoo.bar = myBar
Run Code Online (Sandbox Code Playgroud)

好吧,我对这个比喻不太满意,因为:

  • 在现实世界中,您将插件插入套接字,因此源类应该有一个插件,目标类应该是一个套接字,但在"代码世界"中,我有一个指向另一个类的类的指针;
  • 当你与基数> 1的关联时,我的隐喻效果不好.我试过MultiplePlug< T >(基本上是a std::list< Plug< T > >),但听起来不太好:现实世界中的"多重插头"是什么?

在这里你可以找到我的图书馆.你对一个更适合我的代码的比喻有什么建议吗?

(不过,如果您对图书馆有任何其他好的建议,欢迎他们!)

非常感谢你.

注意:我知道还有另一个问题主题是"什么是依赖注入的一个很好的比喻",但这不是它的重复.

编辑:是一篇关于着名博客文章评论中的主题的讨论.

Edit2:最后,我决定将语法更改为更好更简单的语法:

// explicit catalog
use( myCatalog["myBar"] ).as( "bar" …
Run Code Online (Sandbox Code Playgroud)

c++ oop dependency-injection ioc-container

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

从 EMSCRIPTEN 访问 DOM

有没有办法从 EMSCRIPTEN C++ 应用程序访问 DOM?

例如,我想读取/设置 html textarea 的值并接收 html 按钮 onclick 事件。

有人可以提供 C++ 片段吗?

谢谢。

html c++ emscripten

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

如何从谷歌分析报告中排除谷歌代码中的自我流量?

我目前正在使用Google Analytics来获取我在code.google.com上托管的项目的报告.

我想排除自己生成的流量.我知道Google Analytics基本上提供了两种过滤流量的方法:通过IP地址和Cookie.ISP为我提供了动态IP地址,因此无法按IP地址进行过滤.然后我应该使用cookies方法.

我读过我应该在我的网站上添加一些javascript代码来设置cookie.我的问题是:如何在谷歌代码的维基页面添加我需要的JavaScript?还有另一种方法来实现我的目标吗?

谢谢.

google-analytics google-code

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

将进程stdin和stdout重定向到netcat

我有一个带有简单交互式命令行界面的嵌入式Linux应用程序.

我想从telnet(或网络,一般)访问命令行.

但是,应该在电路板打开时以及在一个唯一的实例中启动该过程.因此,以下netcat命令不是一个选项:

nc -l -p 4000 -e myapp
Run Code Online (Sandbox Code Playgroud)

我可以

nc -l -p 4000 | myapp
Run Code Online (Sandbox Code Playgroud)

向myapp发送远程命令,但这样我看不到myapp输出.

有没有什么办法来重定向 stdin和stdout来netcat

谢谢.

linux netcat socat

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

使用 window.crypto.subtle API 从浏览器解密 RSA 消息

我正在尝试使用相应的私钥对使用公钥编码的 RSA 2048 位消息进行解码。环境是 google chrome,我正在使用window.crypto.subtleAPI。

我生成了密钥对并使用openssl工具对消息进行了编码:

# generate keys and put the private one in file private_key.pem
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

# extract public key in file public_key.pem
openssl rsa -pubout -in private_key.pem -out public_key.pem

# encode message input.txt using the public key
openssl rsautl -encrypt -oaep -inkey public_key.pem -pubin -in input.txt -out msg_rsa.enc

# convert the encoded msg in base 64 format
base64 msg_rsa.enc > msg_rsa_64.enc
Run Code Online (Sandbox Code Playgroud)

这是我用来解码消息的 JavaScript 代码:

function …
Run Code Online (Sandbox Code Playgroud)

javascript rsa encryption-asymmetric window.crypto

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

std :: find on std :: vector <std :: string>在Visual C++ 2008中无法编译?

我在Visual C++ 2008 Express Edition上尝试了这个代码,但它没有编译:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    typedef std::string Element;
    typedef std::vector< Element > Vector;
    typedef Vector::iterator Iterator;

    Vector v;
    std::find( v.begin(), v.end(), std::string( "xxx" ) );

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

我收到以下错误:

c:\programmi\microsoft visual studio 9.0\vc\include\algorithm(40) : error C2784: 'bool  std::operator ==(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'std::basic_string<_Elem,_Traits,_Ax>'
Run Code Online (Sandbox Code Playgroud)

相同的代码由gcc编译纠正并按预期工作.

这是Visual Studio的错误吗?如何让我的示例在Visual C++ 2008上运行?

c++ stl visual-studio-2008

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