C ++ Move Semantics:将unique_ptr引用的矩阵附加到向量

时间:2018-03-30 13:37:01

标签: c++ move-semantics armadillo

我有一个Armadillo矩阵,由import { Pipe, PipeTransform } from '@angular/core'; import { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser'; @Pipe({ name: 'safe' }) // see https://medium.com/@swarnakishore/angular-safe-pipe-implementation-to-bypass-domsanitizer-stripping-out-content-c1bf0f1cc36b // usage: <div [innerHtml]="htmlSnippet | safe: 'html'"></div> export class SafePipe implements PipeTransform { constructor(protected sanitizer: DomSanitizer) {} public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl { switch (type) { case 'html': return this.sanitizer.bypassSecurityTrustHtml(value); case 'style': return this.sanitizer.bypassSecurityTrustStyle(value); case 'script': return this.sanitizer.bypassSecurityTrustScript(value); case 'url': return this.sanitizer.bypassSecurityTrustUrl(value); case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value); default: throw new Error(`Invalid safe type specified: ${type}`); } } } 引用。我想将此矩阵附加到矩阵向量,而不复制基础数据。

到目前为止,我有以下内容:

unique_ptr

我认为这会做到以下几点:

  1. 访问基础std::unique_ptr<arma::mat> m = ...; // Assume this is populated somewhere std::vector<arma::mat> vec; vec.push_back(std::move(*m)); 对象(arma::mat
  2. 将此对象设为右值(*m
  3. 将对象附加到矢量而不复制它(因为它现在是右值)
  4. 这是正确的,还是我错过了什么?

    感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  

这是正确的,还是我错过了什么?

是的,这是正确的。

有几个缺点。

  1. 在最后一点Parse.Cloud.beforeSave('MyClass', (request, response) => { let object = request.object; for( var key in object.dirtyKeys() ) { if( !schema.fields.hasOwnProperty(key) ) < Unset or return error > } response.success(); } 指死亡的物体。访问它可能很危险。
  2. 类型m的对象足够重。查看用于小向量和矩阵的封装本地存储。它禁用了小矩阵和向量的移动语义。
  3. 由于小对象的本地存储空间相同,arma::mat的大小调整因其元素操作而变重。
  4. 我更喜欢像bellow

    这样的代码
    std::vector<arma::mat>

答案 1 :(得分:0)

你拥有的是正确的。但仍有改进的余地。具体地,

if (textBox.lastChild != "<br></br>") {
    $(textBox).append("<br />");
}

这会立即释放指针。这意味着移动的对象未初始化(析构函数被调用),存储在现场解除分配。这可能会带来一些性能上的好处(所讨论的here适用的论点相同)。

相关问题