首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c++中初始化对象数组

在c++中初始化对象数组
EN

Stack Overflow用户
提问于 2020-07-24 14:32:19
回答 3查看 98关注 0票数 1

我想初始化一个堆栈上有一百万个对象的数组,我需要在下面的代码中写一百万&i。有没有其他更好的方法。

代码语言:javascript
运行
复制
#include <iostream>

class A{
public:
    A(int* p)
       : p_(p){
        std::cout << "A" << std::endl;  
    }   

private:
    int *p_;
};

int main(){
   int i;
   A a[3] = {&i, &i, &i};
}
EN

回答 3

Stack Overflow用户

发布于 2020-07-24 14:41:36

代码语言:javascript
运行
复制
#include <iostream>
#include <type_traits>

class A{
public:
    A(int* p)
        : p_(p){
            std::cout << "A" << std::endl;
    }
private:
    int *p_;
};

int main(){
    using elemType = std::aligned_storage<sizeof(A), alignof(A)>::type;
    const size_t count = 1000000;

    int i;
    elemType a[count];

    for(int idx = 0; idx < count: ++idx) {
         new (&a[idx]) A(&i);
    }

    ...

    for(int idx = 0; idx < count: ++idx) {
         reinterpret_cast<A&>(a[idx]).~A();
    }

    return 0;
}
票数 3
EN

Stack Overflow用户

发布于 2020-07-24 14:40:59

C++新运算符可用于调用预分配内存上的构造函数:

代码语言:javascript
运行
复制
#include <iostream>
#include <cstddef>
#include <cstdint>


class A{
public:
    A(int* p)
       : p_(p){
        std::cout << "A" << std::endl;  
    }   

private:
    int *p_;
};

int main(){
   int i;
   uint8_t buf[1000000 * sizeof(A)];

   A* pa = reinterpret_cast<A*>(buf);

   for (size_t n = 0; n < 1000000; n++) {
       new (&pa[n]) A(&i);
   }

   return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2020-07-24 14:36:49

您可以使用std::vector和initialize is,其中包含一百万个元素

代码语言:javascript
运行
复制
std::vector<A> a(1000000, &i);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63068079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档