2012-09-21 30 views
8

Làm cách nào để xác định hàm main() của riêng tôi khi thử nghiệm với tăng?Chức năng chính thử nghiệm đơn vị tăng cường?

Tăng đang sử dụng chức năng chính của riêng nó, nhưng tôi đang sử dụng trình quản lý bộ nhớ tùy chỉnh và cần được khởi chạy trước khi bất kỳ bộ nhớ nào được cấp phát, nếu không tôi sẽ gặp lỗi.

+0

Trong C++, 'main' không phải là phương pháp. – jalf

Trả lời

11

Tôi không tin bạn thực sự cần chính của riêng bạn. Tôi nghĩ bạn tốt hơn nhiều với global fixture:

struct AllocatorSetup { 
    AllocatorSetup() { /* setup your allocator here */ } 
    ~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ } 
}; 

BOOST_GLOBAL_FIXTURE(AllocatorSetup); 
+0

Vì mục đích của OP, điều này có vẻ phù hợp nhất. –

-1

Memory có thể được phân bổ trước main:

static int* x = new int(1); 
int main() { return *x; } 

Và bạn có thể làm quản lý bộ nhớ của bạn một biến toàn cầu là tốt,
nhưng bạn không thể thực thi một thứ tự cụ thể của các biến khởi tạo toàn cầu. (trong tiêu chuẩn C++ ít nhất)

Trong Windows bạn có thể đưa trình quản lý bộ nhớ vào DLL, nó sẽ được khởi tạo trước khi điểm vào ứng dụng được gọi, nhưng vẫn có thể phân bổ bộ nhớ trước - một DLL khác, hoặc CRT của DLL của bạn.

+0

Thứ tự khởi tạo của các hình cầu được xác định rõ trong một đơn vị biên dịch đơn - vì vậy bạn _can_ thực thi bất kỳ thứ tự nào bạn muốn. Chỉ cần đặt chúng trong một CU duy nhất :) – Fiktik

0

Bạn có thể xác định một đối tượng tĩnh và constructor của ông sẽ thực thi trước khi chính:

class Alloc_Setup { 
    Alloc_Setup() { 
     // Your init code 
    } 
    ~Alloc_Setup() { 
     // Your cleanup 
    } 
}; 
Alloc_Setup setup; 
int main() {} // (generated by boost) 
+0

Đó là nhiều hơn một hack hơn một giải pháp, cộng với nó không cho phép bạn xác định chức năng chính của riêng bạn. Không có vấn đề khó khăn, tôi tìm thấy câu trả lời. – ProgrammerAtWork

Các vấn đề liên quan